blob: 1e9714216bdd318005f46b420cf47ca81587b79d [file] [log] [blame]
R David Murray6a143812013-12-20 14:37:39 -05001.. currentmodule:: asyncio
Victor Stinnerea3183f2013-12-03 01:08:00 +01002
Victor Stinner9592edb2014-02-02 15:03:02 +01003.. _asyncio-event-loop:
Victor Stinnerea3183f2013-12-03 01:08:00 +01004
Victor Stinneraea82292014-07-08 23:42:38 +02005Base Event Loop
6===============
Victor Stinnerea3183f2013-12-03 01:08:00 +01007
8The event loop is the central execution device provided by :mod:`asyncio`.
Zachary Ware5e580da2015-08-27 15:54:39 -05009It provides multiple facilities, including:
Victor Stinnerea3183f2013-12-03 01:08:00 +010010
Eli Benderskyb73c8332014-02-09 06:07:47 -080011* Registering, executing and cancelling delayed calls (timeouts).
Victor Stinnerea3183f2013-12-03 01:08:00 +010012
Victor Stinner9592edb2014-02-02 15:03:02 +010013* Creating client and server :ref:`transports <asyncio-transport>` for various
Eli Benderskyb73c8332014-02-09 06:07:47 -080014 kinds of communication.
Victor Stinnerea3183f2013-12-03 01:08:00 +010015
Eli Bendersky136fea22014-02-09 06:55:58 -080016* Launching subprocesses and the associated :ref:`transports
17 <asyncio-transport>` for communication with an external program.
Victor Stinnerea3183f2013-12-03 01:08:00 +010018
Eli Benderskyb73c8332014-02-09 06:07:47 -080019* Delegating costly function calls to a pool of threads.
Victor Stinnerea3183f2013-12-03 01:08:00 +010020
Victor Stinneraea82292014-07-08 23:42:38 +020021.. class:: BaseEventLoop
Eli Bendersky136fea22014-02-09 06:55:58 -080022
Victor Stinneraea82292014-07-08 23:42:38 +020023 Base class of event loops.
Victor Stinnerea3183f2013-12-03 01:08:00 +010024
Victor Stinner83704962015-02-25 14:24:15 +010025 This class is :ref:`not thread safe <asyncio-multithreading>`.
26
Victor Stinnerea3183f2013-12-03 01:08:00 +010027Run an event loop
28-----------------
29
30.. method:: BaseEventLoop.run_forever()
31
Guido van Rossum41f69f42015-11-19 13:28:47 -080032 Run until :meth:`stop` is called. If :meth:`stop` is called before
33 :meth:`run_forever()` is called, this polls the I/O selector once
34 with a timeout of zero, runs all callbacks scheduled in response to
35 I/O events (and those that were already scheduled), and then exits.
36 If :meth:`stop` is called while :meth:`run_forever` is running,
37 this will run the current batch of callbacks and then exit. Note
38 that callbacks scheduled by callbacks will not run in that case;
39 they will run the next time :meth:`run_forever` is called.
40
Guido van Rossum82f9fea2015-11-19 13:33:34 -080041 .. versionchanged:: 3.5.1
Victor Stinnerea3183f2013-12-03 01:08:00 +010042
43.. method:: BaseEventLoop.run_until_complete(future)
44
Victor Stinner99c2ab42013-12-03 19:17:25 +010045 Run until the :class:`Future` is done.
Victor Stinnerea3183f2013-12-03 01:08:00 +010046
Victor Stinner530ef2f2014-07-08 12:39:10 +020047 If the argument is a :ref:`coroutine object <coroutine>`, it is wrapped by
Yury Selivanov04356e12015-06-30 22:13:22 -040048 :func:`ensure_future`.
Victor Stinnerea3183f2013-12-03 01:08:00 +010049
50 Return the Future's result, or raise its exception.
51
52.. method:: BaseEventLoop.is_running()
53
54 Returns running status of event loop.
55
Victor Stinnerafbf8272013-12-03 02:05:42 +010056.. method:: BaseEventLoop.stop()
Victor Stinnerea3183f2013-12-03 01:08:00 +010057
58 Stop running the event loop.
59
Guido van Rossum41f69f42015-11-19 13:28:47 -080060 This causes :meth:`run_forever` to exit at the next suitable
61 opportunity (see there for more details).
62
Guido van Rossum82f9fea2015-11-19 13:33:34 -080063 .. versionchanged:: 3.5.1
Victor Stinnerea3183f2013-12-03 01:08:00 +010064
Victor Stinnerbb2fc5b2014-06-10 10:23:10 +020065.. method:: BaseEventLoop.is_closed()
66
67 Returns ``True`` if the event loop was closed.
68
69 .. versionadded:: 3.4.2
70
Victor Stinnerea3183f2013-12-03 01:08:00 +010071.. method:: BaseEventLoop.close()
72
Guido van Rossum41f69f42015-11-19 13:28:47 -080073 Close the event loop. The loop must not be running. Pending
74 callbacks will be lost.
Victor Stinnerea3183f2013-12-03 01:08:00 +010075
76 This clears the queues and shuts down the executor, but does not wait for
77 the executor to finish.
78
79 This is idempotent and irreversible. No other methods should be called after
80 this one.
81
Victor Stinner8464c242014-11-28 13:15:41 +010082.. _asyncio-pass-keywords:
Victor Stinnerea3183f2013-12-03 01:08:00 +010083
84Calls
85-----
86
Victor Stinner8464c242014-11-28 13:15:41 +010087Most :mod:`asyncio` functions don't accept keywords. If you want to pass
88keywords to your callback, use :func:`functools.partial`. For example,
89``loop.call_soon(functools.partial(print, "Hello", flush=True))`` will call
90``print("Hello", flush=True)``.
91
92.. note::
93 :func:`functools.partial` is better than ``lambda`` functions, because
94 :mod:`asyncio` can inspect :func:`functools.partial` object to display
95 parameters in debug mode, whereas ``lambda`` functions have a poor
96 representation.
97
Victor Stinnerea3183f2013-12-03 01:08:00 +010098.. method:: BaseEventLoop.call_soon(callback, \*args)
99
Victor Stinner4d5115c2014-12-15 17:50:55 +0100100 Arrange for a callback to be called as soon as possible. The callback is
101 called after :meth:`call_soon` returns, when control returns to the event
102 loop.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100103
104 This operates as a FIFO queue, callbacks are called in the order in
105 which they are registered. Each callback will be called exactly once.
106
107 Any positional arguments after the callback will be passed to the
108 callback when it is called.
109
Yury Selivanov1096f762015-06-25 13:49:52 -0400110 An instance of :class:`asyncio.Handle` is returned, which can be
111 used to cancel the callback.
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500112
Victor Stinner8464c242014-11-28 13:15:41 +0100113 :ref:`Use functools.partial to pass keywords to the callback
114 <asyncio-pass-keywords>`.
115
Victor Stinnerea3183f2013-12-03 01:08:00 +0100116.. method:: BaseEventLoop.call_soon_threadsafe(callback, \*args)
117
118 Like :meth:`call_soon`, but thread safe.
119
Victor Stinner83704962015-02-25 14:24:15 +0100120 See the :ref:`concurrency and multithreading <asyncio-multithreading>`
121 section of the documentation.
122
Victor Stinnerea3183f2013-12-03 01:08:00 +0100123
Victor Stinner45b27ed2014-02-01 02:36:43 +0100124.. _asyncio-delayed-calls:
125
Victor Stinnerea3183f2013-12-03 01:08:00 +0100126Delayed calls
127-------------
128
129The event loop has its own internal clock for computing timeouts.
130Which clock is used depends on the (platform-specific) event loop
131implementation; ideally it is a monotonic clock. This will generally be
132a different clock than :func:`time.time`.
133
Victor Stinnerfd9d3742014-02-18 09:37:43 +0100134.. note::
135
136 Timeouts (relative *delay* or absolute *when*) should not exceed one day.
137
Victor Stinner45b27ed2014-02-01 02:36:43 +0100138
Victor Stinnerea3183f2013-12-03 01:08:00 +0100139.. method:: BaseEventLoop.call_later(delay, callback, *args)
140
141 Arrange for the *callback* to be called after the given *delay*
142 seconds (either an int or float).
143
Yury Selivanov1096f762015-06-25 13:49:52 -0400144 An instance of :class:`asyncio.Handle` is returned, which can be
145 used to cancel the callback.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100146
147 *callback* will be called exactly once per call to :meth:`call_later`.
148 If two callbacks are scheduled for exactly the same time, it is
149 undefined which will be called first.
150
151 The optional positional *args* will be passed to the callback when it
152 is called. If you want the callback to be called with some named
153 arguments, use a closure or :func:`functools.partial`.
154
Victor Stinner8464c242014-11-28 13:15:41 +0100155 :ref:`Use functools.partial to pass keywords to the callback
156 <asyncio-pass-keywords>`.
157
Victor Stinnerea3183f2013-12-03 01:08:00 +0100158.. method:: BaseEventLoop.call_at(when, callback, *args)
159
160 Arrange for the *callback* to be called at the given absolute timestamp
Berker Peksagb5563992014-11-07 19:51:07 +0200161 *when* (an int or float), using the same time reference as
162 :meth:`BaseEventLoop.time`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100163
164 This method's behavior is the same as :meth:`call_later`.
165
Yury Selivanov1096f762015-06-25 13:49:52 -0400166 An instance of :class:`asyncio.Handle` is returned, which can be
167 used to cancel the callback.
168
Victor Stinner8464c242014-11-28 13:15:41 +0100169 :ref:`Use functools.partial to pass keywords to the callback
170 <asyncio-pass-keywords>`.
171
Victor Stinnerea3183f2013-12-03 01:08:00 +0100172.. method:: BaseEventLoop.time()
173
174 Return the current time, as a :class:`float` value, according to the
175 event loop's internal clock.
176
Victor Stinner3e09e322013-12-03 01:22:06 +0100177.. seealso::
178
179 The :func:`asyncio.sleep` function.
180
Victor Stinnerea3183f2013-12-03 01:08:00 +0100181
Yury Selivanov950204d2016-05-16 16:23:00 -0400182Futures
183-------
184
185.. method:: BaseEventLoop.create_future()
186
187 Create an :class:`asyncio.Future` object attached to the loop.
188
189 This is a preferred way to create futures in asyncio, as event
190 loop implementations can provide alternative implementations
191 of the Future class (with better performance or instrumentation).
192
193 .. versionadded:: 3.5.2
194
195
Yury Selivanovbb961342015-06-25 11:54:34 -0400196Tasks
197-----
Victor Stinner530ef2f2014-07-08 12:39:10 +0200198
199.. method:: BaseEventLoop.create_task(coro)
200
201 Schedule the execution of a :ref:`coroutine object <coroutine>`: wrap it in
202 a future. Return a :class:`Task` object.
203
204 Third-party event loops can use their own subclass of :class:`Task` for
205 interoperability. In this case, the result type is a subclass of
206 :class:`Task`.
207
Victor Stinner337e03f2014-08-11 01:11:13 +0200208 This method was added in Python 3.4.2. Use the :func:`async` function to
209 support also older Python versions.
Victor Stinner530ef2f2014-07-08 12:39:10 +0200210
211 .. versionadded:: 3.4.2
212
Yury Selivanov71854612015-05-11 16:28:27 -0400213.. method:: BaseEventLoop.set_task_factory(factory)
214
215 Set a task factory that will be used by
216 :meth:`BaseEventLoop.create_task`.
217
218 If *factory* is ``None`` the default task factory will be set.
219
220 If *factory* is a *callable*, it should have a signature matching
221 ``(loop, coro)``, where *loop* will be a reference to the active
222 event loop, *coro* will be a coroutine object. The callable
223 must return an :class:`asyncio.Future` compatible object.
224
225 .. versionadded:: 3.4.4
226
227.. method:: BaseEventLoop.get_task_factory()
228
229 Return a task factory, or ``None`` if the default one is in use.
230
231 .. versionadded:: 3.4.4
232
Victor Stinner530ef2f2014-07-08 12:39:10 +0200233
Victor Stinnerea3183f2013-12-03 01:08:00 +0100234Creating connections
Victor Stinner0c6f1ca2013-12-03 01:46:39 +0100235--------------------
Victor Stinnerea3183f2013-12-03 01:08:00 +0100236
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100237.. coroutinemethod:: BaseEventLoop.create_connection(protocol_factory, host=None, port=None, \*, ssl=None, family=0, proto=0, flags=0, sock=None, local_addr=None, server_hostname=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100238
239 Create a streaming transport connection to a given Internet *host* and
Victor Stinnera6919aa2014-02-19 13:32:34 +0100240 *port*: socket family :py:data:`~socket.AF_INET` or
241 :py:data:`~socket.AF_INET6` depending on *host* (or *family* if specified),
242 socket type :py:data:`~socket.SOCK_STREAM`. *protocol_factory* must be a
243 callable returning a :ref:`protocol <asyncio-protocol>` instance.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100244
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500245 This method is a :ref:`coroutine <coroutine>` which will try to
Victor Stinnerea3183f2013-12-03 01:08:00 +0100246 establish the connection in the background. When successful, the
247 coroutine returns a ``(transport, protocol)`` pair.
248
249 The chronological synopsis of the underlying operation is as follows:
250
Victor Stinner9592edb2014-02-02 15:03:02 +0100251 #. The connection is established, and a :ref:`transport <asyncio-transport>`
Victor Stinnerea3183f2013-12-03 01:08:00 +0100252 is created to represent it.
253
254 #. *protocol_factory* is called without arguments and must return a
Victor Stinner9592edb2014-02-02 15:03:02 +0100255 :ref:`protocol <asyncio-protocol>` instance.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100256
257 #. The protocol instance is tied to the transport, and its
258 :meth:`connection_made` method is called.
259
260 #. The coroutine returns successfully with the ``(transport, protocol)``
261 pair.
262
263 The created transport is an implementation-dependent bidirectional stream.
264
265 .. note::
266 *protocol_factory* can be any kind of callable, not necessarily
267 a class. For example, if you want to use a pre-created
268 protocol instance, you can pass ``lambda: my_protocol``.
269
Martin Panterc04fb562016-02-10 05:44:01 +0000270 Options that change how the connection is created:
Victor Stinnerea3183f2013-12-03 01:08:00 +0100271
272 * *ssl*: if given and not false, a SSL/TLS transport is created
273 (by default a plain TCP transport is created). If *ssl* is
274 a :class:`ssl.SSLContext` object, this context is used to create
275 the transport; if *ssl* is :const:`True`, a context with some
276 unspecified default settings is used.
277
Berker Peksag9c1dba22014-09-28 00:00:58 +0300278 .. seealso:: :ref:`SSL/TLS security considerations <ssl-security>`
Antoine Pitrouc5e075f2014-03-22 18:19:11 +0100279
Victor Stinnerea3183f2013-12-03 01:08:00 +0100280 * *server_hostname*, is only for use together with *ssl*,
281 and sets or overrides the hostname that the target server's certificate
282 will be matched against. By default the value of the *host* argument
283 is used. If *host* is empty, there is no default and you must pass a
284 value for *server_hostname*. If *server_hostname* is an empty
285 string, hostname matching is disabled (which is a serious security
286 risk, allowing for man-in-the-middle-attacks).
287
288 * *family*, *proto*, *flags* are the optional address family, protocol
289 and flags to be passed through to getaddrinfo() for *host* resolution.
290 If given, these should all be integers from the corresponding
291 :mod:`socket` module constants.
292
293 * *sock*, if given, should be an existing, already connected
294 :class:`socket.socket` object to be used by the transport.
295 If *sock* is given, none of *host*, *port*, *family*, *proto*, *flags*
296 and *local_addr* should be specified.
297
298 * *local_addr*, if given, is a ``(local_host, local_port)`` tuple used
299 to bind the socket to locally. The *local_host* and *local_port*
300 are looked up using getaddrinfo(), similarly to *host* and *port*.
301
Victor Stinner60208a12015-09-15 22:41:52 +0200302 .. versionchanged:: 3.5
303
304 On Windows with :class:`ProactorEventLoop`, SSL/TLS is now supported.
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200305
Victor Stinnerc8ea8132014-01-23 11:02:09 +0100306 .. seealso::
307
308 The :func:`open_connection` function can be used to get a pair of
309 (:class:`StreamReader`, :class:`StreamWriter`) instead of a protocol.
310
Victor Stinnerea3183f2013-12-03 01:08:00 +0100311
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700312.. coroutinemethod:: BaseEventLoop.create_datagram_endpoint(protocol_factory, local_addr=None, remote_addr=None, \*, family=0, proto=0, flags=0, reuse_address=None, reuse_port=None, allow_broadcast=None, sock=None)
Victor Stinnera6919aa2014-02-19 13:32:34 +0100313
314 Create datagram connection: socket family :py:data:`~socket.AF_INET` or
315 :py:data:`~socket.AF_INET6` depending on *host* (or *family* if specified),
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700316 socket type :py:data:`~socket.SOCK_DGRAM`. *protocol_factory* must be a
317 callable returning a :ref:`protocol <asyncio-protocol>` instance.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100318
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500319 This method is a :ref:`coroutine <coroutine>` which will try to
Victor Stinnera6919aa2014-02-19 13:32:34 +0100320 establish the connection in the background. When successful, the
321 coroutine returns a ``(transport, protocol)`` pair.
322
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700323 Options changing how the connection is created:
324
325 * *local_addr*, if given, is a ``(local_host, local_port)`` tuple used
326 to bind the socket to locally. The *local_host* and *local_port*
327 are looked up using :meth:`getaddrinfo`.
328
329 * *remote_addr*, if given, is a ``(remote_host, remote_port)`` tuple used
330 to connect the socket to a remote address. The *remote_host* and
331 *remote_port* are looked up using :meth:`getaddrinfo`.
332
333 * *family*, *proto*, *flags* are the optional address family, protocol
334 and flags to be passed through to :meth:`getaddrinfo` for *host*
335 resolution. If given, these should all be integers from the
336 corresponding :mod:`socket` module constants.
337
338 * *reuse_address* tells the kernel to reuse a local socket in
339 TIME_WAIT state, without waiting for its natural timeout to
340 expire. If not specified will automatically be set to True on
341 UNIX.
342
343 * *reuse_port* tells the kernel to allow this endpoint to be bound to the
344 same port as other existing endpoints are bound to, so long as they all
345 set this flag when being created. This option is not supported on Windows
346 and some UNIX's. If the :py:data:`~socket.SO_REUSEPORT` constant is not
347 defined then this capability is unsupported.
348
349 * *allow_broadcast* tells the kernel to allow this endpoint to send
350 messages to the broadcast address.
351
352 * *sock* can optionally be specified in order to use a preexisting,
353 already connected, :class:`socket.socket` object to be used by the
354 transport. If specified, *local_addr* and *remote_addr* should be omitted
355 (must be :const:`None`).
Victor Stinnera6919aa2014-02-19 13:32:34 +0100356
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200357 On Windows with :class:`ProactorEventLoop`, this method is not supported.
358
Victor Stinnerc7edffd2014-10-12 11:24:26 +0200359 See :ref:`UDP echo client protocol <asyncio-udp-echo-client-protocol>` and
360 :ref:`UDP echo server protocol <asyncio-udp-echo-server-protocol>` examples.
361
Victor Stinnera6919aa2014-02-19 13:32:34 +0100362
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100363.. coroutinemethod:: BaseEventLoop.create_unix_connection(protocol_factory, path, \*, ssl=None, sock=None, server_hostname=None)
Victor Stinnera6919aa2014-02-19 13:32:34 +0100364
365 Create UNIX connection: socket family :py:data:`~socket.AF_UNIX`, socket
366 type :py:data:`~socket.SOCK_STREAM`. The :py:data:`~socket.AF_UNIX` socket
367 family is used to communicate between processes on the same machine
368 efficiently.
369
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500370 This method is a :ref:`coroutine <coroutine>` which will try to
Victor Stinnera6919aa2014-02-19 13:32:34 +0100371 establish the connection in the background. When successful, the
372 coroutine returns a ``(transport, protocol)`` pair.
373
374 See the :meth:`BaseEventLoop.create_connection` method for parameters.
375
376 Availability: UNIX.
377
378
Victor Stinnerea3183f2013-12-03 01:08:00 +0100379Creating listening connections
380------------------------------
381
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700382.. coroutinemethod:: BaseEventLoop.create_server(protocol_factory, host=None, port=None, \*, family=socket.AF_UNSPEC, flags=socket.AI_PASSIVE, sock=None, backlog=100, ssl=None, reuse_address=None, reuse_port=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100383
Victor Stinner33f6abe2014-10-12 20:36:04 +0200384 Create a TCP server (socket type :data:`~socket.SOCK_STREAM`) bound to
385 *host* and *port*.
386
387 Return a :class:`Server` object, its :attr:`~Server.sockets` attribute
388 contains created sockets. Use the :meth:`Server.close` method to stop the
389 server: close listening sockets.
390
391 Parameters:
392
Victor Stinner5e4a7d82015-09-21 18:33:43 +0200393 * The *host* parameter can be a string, in that case the TCP server is
394 bound to *host* and *port*. The *host* parameter can also be a sequence
395 of strings and in that case the TCP server is bound to all hosts of the
396 sequence. If *host* is an empty string or ``None``, all interfaces are
397 assumed and a list of multiple sockets will be returned (most likely one
398 for IPv4 and another one for IPv6).
Victor Stinner33f6abe2014-10-12 20:36:04 +0200399
400 * *family* can be set to either :data:`socket.AF_INET` or
401 :data:`~socket.AF_INET6` to force the socket to use IPv4 or IPv6. If not set
402 it will be determined from host (defaults to :data:`socket.AF_UNSPEC`).
403
404 * *flags* is a bitmask for :meth:`getaddrinfo`.
405
406 * *sock* can optionally be specified in order to use a preexisting
407 socket object. If specified, *host* and *port* should be omitted (must be
408 :const:`None`).
409
410 * *backlog* is the maximum number of queued connections passed to
411 :meth:`~socket.socket.listen` (defaults to 100).
412
413 * *ssl* can be set to an :class:`~ssl.SSLContext` to enable SSL over the
414 accepted connections.
415
416 * *reuse_address* tells the kernel to reuse a local socket in
417 TIME_WAIT state, without waiting for its natural timeout to
418 expire. If not specified will automatically be set to True on
419 UNIX.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100420
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700421 * *reuse_port* tells the kernel to allow this endpoint to be bound to the
422 same port as other existing endpoints are bound to, so long as they all
423 set this flag when being created. This option is not supported on
424 Windows.
425
Victor Stinnerd1432092014-06-19 17:11:49 +0200426 This method is a :ref:`coroutine <coroutine>`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100427
Victor Stinner60208a12015-09-15 22:41:52 +0200428 .. versionchanged:: 3.5
429
430 On Windows with :class:`ProactorEventLoop`, SSL/TLS is now supported.
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200431
Victor Stinnerc8ea8132014-01-23 11:02:09 +0100432 .. seealso::
433
434 The function :func:`start_server` creates a (:class:`StreamReader`,
435 :class:`StreamWriter`) pair and calls back a function with this pair.
436
Victor Stinner7b58a2b2015-09-21 18:41:05 +0200437 .. versionchanged:: 3.5.1
Victor Stinner5e4a7d82015-09-21 18:33:43 +0200438
439 The *host* parameter can now be a sequence of strings.
440
Victor Stinnerea3183f2013-12-03 01:08:00 +0100441
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100442.. coroutinemethod:: BaseEventLoop.create_unix_server(protocol_factory, path=None, \*, sock=None, backlog=100, ssl=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100443
Victor Stinnera6919aa2014-02-19 13:32:34 +0100444 Similar to :meth:`BaseEventLoop.create_server`, but specific to the
445 socket family :py:data:`~socket.AF_UNIX`.
446
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100447 This method is a :ref:`coroutine <coroutine>`.
448
Victor Stinnera6919aa2014-02-19 13:32:34 +0100449 Availability: UNIX.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100450
451
Victor Stinnerc1567df2014-02-08 23:22:58 +0100452Watch file descriptors
453----------------------
454
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200455On Windows with :class:`SelectorEventLoop`, only socket handles are supported
456(ex: pipe file descriptors are not supported).
457
458On Windows with :class:`ProactorEventLoop`, these methods are not supported.
459
Victor Stinnerc1567df2014-02-08 23:22:58 +0100460.. method:: BaseEventLoop.add_reader(fd, callback, \*args)
461
462 Start watching the file descriptor for read availability and then call the
463 *callback* with specified arguments.
464
Victor Stinner8464c242014-11-28 13:15:41 +0100465 :ref:`Use functools.partial to pass keywords to the callback
466 <asyncio-pass-keywords>`.
467
Victor Stinnerc1567df2014-02-08 23:22:58 +0100468.. method:: BaseEventLoop.remove_reader(fd)
469
470 Stop watching the file descriptor for read availability.
471
472.. method:: BaseEventLoop.add_writer(fd, callback, \*args)
473
474 Start watching the file descriptor for write availability and then call the
475 *callback* with specified arguments.
476
Victor Stinner8464c242014-11-28 13:15:41 +0100477 :ref:`Use functools.partial to pass keywords to the callback
478 <asyncio-pass-keywords>`.
479
Victor Stinnerc1567df2014-02-08 23:22:58 +0100480.. method:: BaseEventLoop.remove_writer(fd)
481
482 Stop watching the file descriptor for write availability.
483
Victor Stinner04e6df32014-10-11 16:16:27 +0200484The :ref:`watch a file descriptor for read events <asyncio-watch-read-event>`
485example uses the low-level :meth:`BaseEventLoop.add_reader` method to register
486the file descriptor of a socket.
487
Victor Stinnerc1567df2014-02-08 23:22:58 +0100488
489Low-level socket operations
490---------------------------
491
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100492.. coroutinemethod:: BaseEventLoop.sock_recv(sock, nbytes)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100493
494 Receive data from the socket. The return value is a bytes object
495 representing the data received. The maximum amount of data to be received
496 at once is specified by *nbytes*.
497
Victor Stinnerd84fd732014-08-26 01:01:59 +0200498 With :class:`SelectorEventLoop` event loop, the socket *sock* must be
499 non-blocking.
Victor Stinnerec2ce092014-07-29 23:12:22 +0200500
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500501 This method is a :ref:`coroutine <coroutine>`.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100502
503 .. seealso::
504
505 The :meth:`socket.socket.recv` method.
506
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100507.. coroutinemethod:: BaseEventLoop.sock_sendall(sock, data)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100508
509 Send data to the socket. The socket must be connected to a remote socket.
510 This method continues to send data from *data* until either all data has
511 been sent or an error occurs. ``None`` is returned on success. On error,
512 an exception is raised, and there is no way to determine how much data, if
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500513 any, was successfully processed by the receiving end of the connection.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100514
Victor Stinnerd84fd732014-08-26 01:01:59 +0200515 With :class:`SelectorEventLoop` event loop, the socket *sock* must be
516 non-blocking.
Victor Stinnerec2ce092014-07-29 23:12:22 +0200517
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500518 This method is a :ref:`coroutine <coroutine>`.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100519
520 .. seealso::
521
522 The :meth:`socket.socket.sendall` method.
523
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100524.. coroutinemethod:: BaseEventLoop.sock_connect(sock, address)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100525
526 Connect to a remote socket at *address*.
527
Victor Stinner1b0580b2014-02-13 09:24:37 +0100528 The *address* must be already resolved to avoid the trap of hanging the
529 entire event loop when the address requires doing a DNS lookup. For
Serhiy Storchaka6a7b3a72016-04-17 08:32:47 +0300530 example, it must be an IP address, not a hostname, for
Victor Stinner1b0580b2014-02-13 09:24:37 +0100531 :py:data:`~socket.AF_INET` and :py:data:`~socket.AF_INET6` address families.
532 Use :meth:`getaddrinfo` to resolve the hostname asynchronously.
533
Victor Stinnerd84fd732014-08-26 01:01:59 +0200534 With :class:`SelectorEventLoop` event loop, the socket *sock* must be
535 non-blocking.
Victor Stinnerec2ce092014-07-29 23:12:22 +0200536
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500537 This method is a :ref:`coroutine <coroutine>`.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100538
539 .. seealso::
540
541 The :meth:`BaseEventLoop.create_connection` method, the
542 :func:`open_connection` function and the :meth:`socket.socket.connect`
543 method.
544
545
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100546.. coroutinemethod:: BaseEventLoop.sock_accept(sock)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100547
548 Accept a connection. The socket must be bound to an address and listening
549 for connections. The return value is a pair ``(conn, address)`` where *conn*
550 is a *new* socket object usable to send and receive data on the connection,
551 and *address* is the address bound to the socket on the other end of the
552 connection.
553
Victor Stinnerec2ce092014-07-29 23:12:22 +0200554 The socket *sock* must be non-blocking.
555
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500556 This method is a :ref:`coroutine <coroutine>`.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100557
558 .. seealso::
559
560 The :meth:`BaseEventLoop.create_server` method, the :func:`start_server`
561 function and the :meth:`socket.socket.accept` method.
562
563
564Resolve host name
565-----------------
Victor Stinnerea3183f2013-12-03 01:08:00 +0100566
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100567.. coroutinemethod:: BaseEventLoop.getaddrinfo(host, port, \*, family=0, type=0, proto=0, flags=0)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100568
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500569 This method is a :ref:`coroutine <coroutine>`, similar to
570 :meth:`socket.getaddrinfo` function but non-blocking.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100571
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100572.. coroutinemethod:: BaseEventLoop.getnameinfo(sockaddr, flags=0)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100573
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500574 This method is a :ref:`coroutine <coroutine>`, similar to
575 :meth:`socket.getnameinfo` function but non-blocking.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100576
577
Victor Stinner984600f2014-03-25 09:40:26 +0100578Connect pipes
579-------------
Victor Stinnerea3183f2013-12-03 01:08:00 +0100580
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200581On Windows with :class:`SelectorEventLoop`, these methods are not supported.
582Use :class:`ProactorEventLoop` to support pipes on Windows.
583
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100584.. coroutinemethod:: BaseEventLoop.connect_read_pipe(protocol_factory, pipe)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100585
Victor Stinnerd84fd732014-08-26 01:01:59 +0200586 Register read pipe in eventloop.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100587
588 *protocol_factory* should instantiate object with :class:`Protocol`
Victor Stinnera5b257a2014-05-29 00:14:03 +0200589 interface. *pipe* is a :term:`file-like object <file object>`.
590 Return pair ``(transport, protocol)``, where *transport* supports the
Victor Stinnerea3183f2013-12-03 01:08:00 +0100591 :class:`ReadTransport` interface.
592
Victor Stinnerd84fd732014-08-26 01:01:59 +0200593 With :class:`SelectorEventLoop` event loop, the *pipe* is set to
594 non-blocking mode.
595
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500596 This method is a :ref:`coroutine <coroutine>`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100597
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100598.. coroutinemethod:: BaseEventLoop.connect_write_pipe(protocol_factory, pipe)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100599
600 Register write pipe in eventloop.
601
602 *protocol_factory* should instantiate object with :class:`BaseProtocol`
Victor Stinner2cef3002014-10-23 22:38:46 +0200603 interface. *pipe* is :term:`file-like object <file object>`.
604 Return pair ``(transport, protocol)``, where *transport* supports
Victor Stinnerea3183f2013-12-03 01:08:00 +0100605 :class:`WriteTransport` interface.
606
Victor Stinnerd84fd732014-08-26 01:01:59 +0200607 With :class:`SelectorEventLoop` event loop, the *pipe* is set to
608 non-blocking mode.
609
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500610 This method is a :ref:`coroutine <coroutine>`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100611
Victor Stinner08444382014-02-02 22:43:39 +0100612.. seealso::
613
Victor Stinner984600f2014-03-25 09:40:26 +0100614 The :meth:`BaseEventLoop.subprocess_exec` and
615 :meth:`BaseEventLoop.subprocess_shell` methods.
Victor Stinner08444382014-02-02 22:43:39 +0100616
Victor Stinnerea3183f2013-12-03 01:08:00 +0100617
Victor Stinner8b863482014-01-27 10:07:50 +0100618UNIX signals
619------------
620
621Availability: UNIX only.
622
623.. method:: BaseEventLoop.add_signal_handler(signum, callback, \*args)
624
625 Add a handler for a signal.
626
627 Raise :exc:`ValueError` if the signal number is invalid or uncatchable.
628 Raise :exc:`RuntimeError` if there is a problem setting up the handler.
629
Victor Stinner8464c242014-11-28 13:15:41 +0100630 :ref:`Use functools.partial to pass keywords to the callback
631 <asyncio-pass-keywords>`.
632
Victor Stinner8b863482014-01-27 10:07:50 +0100633.. method:: BaseEventLoop.remove_signal_handler(sig)
634
635 Remove a handler for a signal.
636
637 Return ``True`` if a signal handler was removed, ``False`` if not.
638
639.. seealso::
640
641 The :mod:`signal` module.
642
643
Victor Stinnerea3183f2013-12-03 01:08:00 +0100644Executor
645--------
646
647Call a function in an :class:`~concurrent.futures.Executor` (pool of threads or
648pool of processes). By default, an event loop uses a thread pool executor
649(:class:`~concurrent.futures.ThreadPoolExecutor`).
650
Andrew Svetlov1c62b522015-10-01 09:48:08 +0300651.. coroutinemethod:: BaseEventLoop.run_in_executor(executor, func, \*args)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100652
Andrew Svetlov1c62b522015-10-01 09:48:08 +0300653 Arrange for a *func* to be called in the specified executor.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100654
Larry Hastings3732ed22014-03-15 21:13:56 -0700655 The *executor* argument should be an :class:`~concurrent.futures.Executor`
656 instance. The default executor is used if *executor* is ``None``.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100657
Andrew Svetlov1c62b522015-10-01 09:48:08 +0300658 :ref:`Use functools.partial to pass keywords to the *func*
Victor Stinner8464c242014-11-28 13:15:41 +0100659 <asyncio-pass-keywords>`.
660
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500661 This method is a :ref:`coroutine <coroutine>`.
662
Victor Stinnerea3183f2013-12-03 01:08:00 +0100663.. method:: BaseEventLoop.set_default_executor(executor)
664
665 Set the default executor used by :meth:`run_in_executor`.
666
667
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500668Error Handling API
669------------------
670
Martin Panterc04fb562016-02-10 05:44:01 +0000671Allows customizing how exceptions are handled in the event loop.
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500672
673.. method:: BaseEventLoop.set_exception_handler(handler)
674
675 Set *handler* as the new event loop exception handler.
676
677 If *handler* is ``None``, the default exception handler will
678 be set.
679
680 If *handler* is a callable object, it should have a
681 matching signature to ``(loop, context)``, where ``loop``
682 will be a reference to the active event loop, ``context``
683 will be a ``dict`` object (see :meth:`call_exception_handler`
684 documentation for details about context).
685
Yury Selivanov950204d2016-05-16 16:23:00 -0400686.. method:: BaseEventLoop.get_exception_handler()
687
688 Return the exception handler, or ``None`` if the default one
689 is in use.
690
691 .. versionadded:: 3.5.2
692
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500693.. method:: BaseEventLoop.default_exception_handler(context)
694
695 Default exception handler.
696
697 This is called when an exception occurs and no exception
698 handler is set, and can be called by a custom exception
699 handler that wants to defer to the default behavior.
700
701 *context* parameter has the same meaning as in
702 :meth:`call_exception_handler`.
703
704.. method:: BaseEventLoop.call_exception_handler(context)
705
706 Call the current event loop exception handler.
707
708 *context* is a ``dict`` object containing the following keys
709 (new keys may be introduced later):
710
711 * 'message': Error message;
712 * 'exception' (optional): Exception object;
713 * 'future' (optional): :class:`asyncio.Future` instance;
714 * 'handle' (optional): :class:`asyncio.Handle` instance;
715 * 'protocol' (optional): :ref:`Protocol <asyncio-protocol>` instance;
716 * 'transport' (optional): :ref:`Transport <asyncio-transport>` instance;
717 * 'socket' (optional): :class:`socket.socket` instance.
718
719 .. note::
720
721 Note: this method should not be overloaded in subclassed
722 event loops. For any custom exception handling, use
723 :meth:`set_exception_handler()` method.
724
Victor Stinner0f3e6bc2014-02-19 23:15:02 +0100725Debug mode
726----------
727
728.. method:: BaseEventLoop.get_debug()
729
Victor Stinner7b7120e2014-06-23 00:12:14 +0200730 Get the debug mode (:class:`bool`) of the event loop.
731
732 The default value is ``True`` if the environment variable
733 :envvar:`PYTHONASYNCIODEBUG` is set to a non-empty string, ``False``
734 otherwise.
Victor Stinner0f3e6bc2014-02-19 23:15:02 +0100735
Victor Stinner64d750b2014-06-18 03:25:23 +0200736 .. versionadded:: 3.4.2
737
Victor Stinner0f3e6bc2014-02-19 23:15:02 +0100738.. method:: BaseEventLoop.set_debug(enabled: bool)
739
740 Set the debug mode of the event loop.
741
Victor Stinner64d750b2014-06-18 03:25:23 +0200742 .. versionadded:: 3.4.2
743
Victor Stinner0f3e6bc2014-02-19 23:15:02 +0100744.. seealso::
745
Victor Stinner62511fd2014-06-23 00:36:11 +0200746 The :ref:`debug mode of asyncio <asyncio-debug-mode>`.
Victor Stinner0f3e6bc2014-02-19 23:15:02 +0100747
Victor Stinner8c462c52014-01-24 18:11:43 +0100748Server
749------
750
Victor Stinner8ebeb032014-07-11 23:47:40 +0200751.. class:: Server
Victor Stinner8c462c52014-01-24 18:11:43 +0100752
Victor Stinner8ebeb032014-07-11 23:47:40 +0200753 Server listening on sockets.
754
755 Object created by the :meth:`BaseEventLoop.create_server` method and the
R David Murray756f0b12015-01-29 19:53:33 -0500756 :func:`start_server` function. Don't instantiate the class directly.
Victor Stinner8c462c52014-01-24 18:11:43 +0100757
758 .. method:: close()
759
Victor Stinner4bfb14a2014-07-12 03:20:24 +0200760 Stop serving: close listening sockets and set the :attr:`sockets`
761 attribute to ``None``.
762
Berker Peksag49c9edf2016-01-20 07:14:22 +0200763 The sockets that represent existing incoming client connections are left
764 open.
Victor Stinner8ebeb032014-07-11 23:47:40 +0200765
Berker Peksag49c9edf2016-01-20 07:14:22 +0200766 The server is closed asynchronously, use the :meth:`wait_closed`
767 coroutine to wait until the server is closed.
Victor Stinner8c462c52014-01-24 18:11:43 +0100768
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100769 .. coroutinemethod:: wait_closed()
Victor Stinner8c462c52014-01-24 18:11:43 +0100770
Victor Stinner8ebeb032014-07-11 23:47:40 +0200771 Wait until the :meth:`close` method completes.
772
773 This method is a :ref:`coroutine <coroutine>`.
774
775 .. attribute:: sockets
776
777 List of :class:`socket.socket` objects the server is listening to, or
778 ``None`` if the server is closed.
Victor Stinner8c462c52014-01-24 18:11:43 +0100779
780
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500781Handle
782------
783
784.. class:: Handle
785
786 A callback wrapper object returned by :func:`BaseEventLoop.call_soon`,
787 :func:`BaseEventLoop.call_soon_threadsafe`, :func:`BaseEventLoop.call_later`,
788 and :func:`BaseEventLoop.call_at`.
789
790 .. method:: cancel()
791
Yury Selivanov1096f762015-06-25 13:49:52 -0400792 Cancel the call. If the callback is already canceled or executed,
793 this method has no effect.
Victor Stinneraea82292014-07-08 23:42:38 +0200794
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500795
Victor Stinner6888b962014-10-11 16:15:58 +0200796Event loop examples
Victor Stinnera092a612015-01-09 15:58:41 +0100797-------------------
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500798
Victor Stinner3e09e322013-12-03 01:22:06 +0100799.. _asyncio-hello-world-callback:
Victor Stinnerea3183f2013-12-03 01:08:00 +0100800
Victor Stinner7f314ed2014-10-15 18:49:16 +0200801Hello World with call_soon()
Victor Stinnera092a612015-01-09 15:58:41 +0100802^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +0100803
Victor Stinner7f314ed2014-10-15 18:49:16 +0200804Example using the :meth:`BaseEventLoop.call_soon` method to schedule a
805callback. The callback displays ``"Hello World"`` and then stops the event
806loop::
Victor Stinnerea3183f2013-12-03 01:08:00 +0100807
808 import asyncio
809
Victor Stinner7f314ed2014-10-15 18:49:16 +0200810 def hello_world(loop):
Victor Stinnerea3183f2013-12-03 01:08:00 +0100811 print('Hello World')
Victor Stinner7f314ed2014-10-15 18:49:16 +0200812 loop.stop()
Victor Stinnerea3183f2013-12-03 01:08:00 +0100813
814 loop = asyncio.get_event_loop()
Victor Stinner7f314ed2014-10-15 18:49:16 +0200815
816 # Schedule a call to hello_world()
817 loop.call_soon(hello_world, loop)
818
819 # Blocking call interrupted by loop.stop()
820 loop.run_forever()
821 loop.close()
Victor Stinnerea3183f2013-12-03 01:08:00 +0100822
Victor Stinner3e09e322013-12-03 01:22:06 +0100823.. seealso::
Victor Stinnerea3183f2013-12-03 01:08:00 +0100824
Victor Stinner6888b962014-10-11 16:15:58 +0200825 The :ref:`Hello World coroutine <asyncio-hello-world-coroutine>` example
826 uses a :ref:`coroutine <coroutine>`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100827
Victor Stinner8b863482014-01-27 10:07:50 +0100828
Victor Stinner7f314ed2014-10-15 18:49:16 +0200829.. _asyncio-date-callback:
830
831Display the current date with call_later()
Victor Stinnera092a612015-01-09 15:58:41 +0100832^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinner7f314ed2014-10-15 18:49:16 +0200833
834Example of callback displaying the current date every second. The callback uses
835the :meth:`BaseEventLoop.call_later` method to reschedule itself during 5
836seconds, and then stops the event loop::
837
838 import asyncio
839 import datetime
840
841 def display_date(end_time, loop):
842 print(datetime.datetime.now())
843 if (loop.time() + 1.0) < end_time:
844 loop.call_later(1, display_date, end_time, loop)
845 else:
846 loop.stop()
847
848 loop = asyncio.get_event_loop()
849
850 # Schedule the first call to display_date()
851 end_time = loop.time() + 5.0
852 loop.call_soon(display_date, end_time, loop)
853
854 # Blocking call interrupted by loop.stop()
855 loop.run_forever()
856 loop.close()
857
858.. seealso::
859
860 The :ref:`coroutine displaying the current date
861 <asyncio-date-coroutine>` example uses a :ref:`coroutine
862 <coroutine>`.
863
864
Victor Stinner04e6df32014-10-11 16:16:27 +0200865.. _asyncio-watch-read-event:
Victor Stinner8b863482014-01-27 10:07:50 +0100866
Victor Stinner04e6df32014-10-11 16:16:27 +0200867Watch a file descriptor for read events
Victor Stinnera092a612015-01-09 15:58:41 +0100868^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinner04e6df32014-10-11 16:16:27 +0200869
870Wait until a file descriptor received some data using the
871:meth:`BaseEventLoop.add_reader` method and then close the event loop::
872
873 import asyncio
Victor Stinnerccd8e342014-10-11 16:30:02 +0200874 try:
875 from socket import socketpair
876 except ImportError:
877 from asyncio.windows_utils import socketpair
Victor Stinner04e6df32014-10-11 16:16:27 +0200878
879 # Create a pair of connected file descriptors
Victor Stinnerccd8e342014-10-11 16:30:02 +0200880 rsock, wsock = socketpair()
Victor Stinner04e6df32014-10-11 16:16:27 +0200881 loop = asyncio.get_event_loop()
882
883 def reader():
884 data = rsock.recv(100)
885 print("Received:", data.decode())
Victor Stinner2cef3002014-10-23 22:38:46 +0200886 # We are done: unregister the file descriptor
Victor Stinner04e6df32014-10-11 16:16:27 +0200887 loop.remove_reader(rsock)
888 # Stop the event loop
889 loop.stop()
890
Victor Stinner2cef3002014-10-23 22:38:46 +0200891 # Register the file descriptor for read event
Victor Stinner04e6df32014-10-11 16:16:27 +0200892 loop.add_reader(rsock, reader)
893
894 # Simulate the reception of data from the network
895 loop.call_soon(wsock.send, 'abc'.encode())
896
897 # Run the event loop
898 loop.run_forever()
899
900 # We are done, close sockets and the event loop
901 rsock.close()
902 wsock.close()
903 loop.close()
904
905.. seealso::
906
907 The :ref:`register an open socket to wait for data using a protocol
908 <asyncio-register-socket>` example uses a low-level protocol created by the
909 :meth:`BaseEventLoop.create_connection` method.
910
911 The :ref:`register an open socket to wait for data using streams
912 <asyncio-register-socket-streams>` example uses high-level streams
913 created by the :func:`open_connection` function in a coroutine.
914
915
916Set signal handlers for SIGINT and SIGTERM
Victor Stinnera092a612015-01-09 15:58:41 +0100917^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinner04e6df32014-10-11 16:16:27 +0200918
919Register handlers for signals :py:data:`SIGINT` and :py:data:`SIGTERM` using
920the :meth:`BaseEventLoop.add_signal_handler` method::
Victor Stinner8b863482014-01-27 10:07:50 +0100921
922 import asyncio
923 import functools
924 import os
925 import signal
926
927 def ask_exit(signame):
928 print("got signal %s: exit" % signame)
929 loop.stop()
930
931 loop = asyncio.get_event_loop()
932 for signame in ('SIGINT', 'SIGTERM'):
933 loop.add_signal_handler(getattr(signal, signame),
934 functools.partial(ask_exit, signame))
935
Serhiy Storchaka0424eaf2015-09-12 17:45:25 +0300936 print("Event loop running forever, press Ctrl+C to interrupt.")
Victor Stinner8b863482014-01-27 10:07:50 +0100937 print("pid %s: send SIGINT or SIGTERM to exit." % os.getpid())
Victor Stinner63b21a82014-07-05 15:38:59 +0200938 try:
939 loop.run_forever()
940 finally:
941 loop.close()
Victor Stinner2cef3002014-10-23 22:38:46 +0200942
943This example only works on UNIX.