blob: 5dd258df3127a67ee9d065c13bdd59b533ac3cb1 [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
lf627d2c82017-07-25 17:03:51 -06008**Source code:** :source:`Lib/asyncio/events.py`
9
Victor Stinnerea3183f2013-12-03 01:08:00 +010010The event loop is the central execution device provided by :mod:`asyncio`.
Zachary Ware5e580da2015-08-27 15:54:39 -050011It provides multiple facilities, including:
Victor Stinnerea3183f2013-12-03 01:08:00 +010012
Eli Benderskyb73c8332014-02-09 06:07:47 -080013* Registering, executing and cancelling delayed calls (timeouts).
Victor Stinnerea3183f2013-12-03 01:08:00 +010014
Victor Stinner9592edb2014-02-02 15:03:02 +010015* Creating client and server :ref:`transports <asyncio-transport>` for various
Eli Benderskyb73c8332014-02-09 06:07:47 -080016 kinds of communication.
Victor Stinnerea3183f2013-12-03 01:08:00 +010017
Eli Bendersky136fea22014-02-09 06:55:58 -080018* Launching subprocesses and the associated :ref:`transports
19 <asyncio-transport>` for communication with an external program.
Victor Stinnerea3183f2013-12-03 01:08:00 +010020
Eli Benderskyb73c8332014-02-09 06:07:47 -080021* Delegating costly function calls to a pool of threads.
Victor Stinnerea3183f2013-12-03 01:08:00 +010022
Victor Stinneraea82292014-07-08 23:42:38 +020023.. class:: BaseEventLoop
Eli Bendersky136fea22014-02-09 06:55:58 -080024
Guido van Rossumf68afd82016-08-08 09:41:21 -070025 This class is an implementation detail. It is a subclass of
26 :class:`AbstractEventLoop` and may be a base class of concrete
27 event loop implementations found in :mod:`asyncio`. It should not
28 be used directly; use :class:`AbstractEventLoop` instead.
29 ``BaseEventLoop`` should not be subclassed by third-party code; the
30 internal interface is not stable.
31
32.. class:: AbstractEventLoop
33
34 Abstract base class of event loops.
Victor Stinnerea3183f2013-12-03 01:08:00 +010035
Victor Stinner83704962015-02-25 14:24:15 +010036 This class is :ref:`not thread safe <asyncio-multithreading>`.
37
Victor Stinnerea3183f2013-12-03 01:08:00 +010038Run an event loop
39-----------------
40
Guido van Rossumf68afd82016-08-08 09:41:21 -070041.. method:: AbstractEventLoop.run_forever()
Victor Stinnerea3183f2013-12-03 01:08:00 +010042
Guido van Rossum41f69f42015-11-19 13:28:47 -080043 Run until :meth:`stop` is called. If :meth:`stop` is called before
44 :meth:`run_forever()` is called, this polls the I/O selector once
45 with a timeout of zero, runs all callbacks scheduled in response to
46 I/O events (and those that were already scheduled), and then exits.
47 If :meth:`stop` is called while :meth:`run_forever` is running,
48 this will run the current batch of callbacks and then exit. Note
49 that callbacks scheduled by callbacks will not run in that case;
50 they will run the next time :meth:`run_forever` is called.
51
Guido van Rossum82f9fea2015-11-19 13:33:34 -080052 .. versionchanged:: 3.5.1
Victor Stinnerea3183f2013-12-03 01:08:00 +010053
Guido van Rossumf68afd82016-08-08 09:41:21 -070054.. method:: AbstractEventLoop.run_until_complete(future)
Victor Stinnerea3183f2013-12-03 01:08:00 +010055
Victor Stinner99c2ab42013-12-03 19:17:25 +010056 Run until the :class:`Future` is done.
Victor Stinnerea3183f2013-12-03 01:08:00 +010057
Victor Stinner530ef2f2014-07-08 12:39:10 +020058 If the argument is a :ref:`coroutine object <coroutine>`, it is wrapped by
Yury Selivanov04356e12015-06-30 22:13:22 -040059 :func:`ensure_future`.
Victor Stinnerea3183f2013-12-03 01:08:00 +010060
61 Return the Future's result, or raise its exception.
62
Guido van Rossumf68afd82016-08-08 09:41:21 -070063.. method:: AbstractEventLoop.is_running()
Victor Stinnerea3183f2013-12-03 01:08:00 +010064
65 Returns running status of event loop.
66
Guido van Rossumf68afd82016-08-08 09:41:21 -070067.. method:: AbstractEventLoop.stop()
Victor Stinnerea3183f2013-12-03 01:08:00 +010068
69 Stop running the event loop.
70
Guido van Rossum41f69f42015-11-19 13:28:47 -080071 This causes :meth:`run_forever` to exit at the next suitable
72 opportunity (see there for more details).
73
Guido van Rossum82f9fea2015-11-19 13:33:34 -080074 .. versionchanged:: 3.5.1
Victor Stinnerea3183f2013-12-03 01:08:00 +010075
Guido van Rossumf68afd82016-08-08 09:41:21 -070076.. method:: AbstractEventLoop.is_closed()
Victor Stinnerbb2fc5b2014-06-10 10:23:10 +020077
78 Returns ``True`` if the event loop was closed.
79
80 .. versionadded:: 3.4.2
81
Guido van Rossumf68afd82016-08-08 09:41:21 -070082.. method:: AbstractEventLoop.close()
Victor Stinnerea3183f2013-12-03 01:08:00 +010083
Guido van Rossum41f69f42015-11-19 13:28:47 -080084 Close the event loop. The loop must not be running. Pending
85 callbacks will be lost.
Victor Stinnerea3183f2013-12-03 01:08:00 +010086
87 This clears the queues and shuts down the executor, but does not wait for
88 the executor to finish.
89
90 This is idempotent and irreversible. No other methods should be called after
91 this one.
92
Yury Selivanov03660042016-12-15 17:36:05 -050093
94.. coroutinemethod:: AbstractEventLoop.shutdown_asyncgens()
95
96 Schedule all currently open :term:`asynchronous generator` objects to
97 close with an :meth:`~agen.aclose()` call. After calling this method,
98 the event loop will issue a warning whenever a new asynchronous generator
99 is iterated. Should be used to finalize all scheduled asynchronous
100 generators reliably. Example::
101
102 try:
103 loop.run_forever()
104 finally:
105 loop.run_until_complete(loop.shutdown_asyncgens())
106 loop.close()
107
108 .. versionadded:: 3.6
109
110
Victor Stinner8464c242014-11-28 13:15:41 +0100111.. _asyncio-pass-keywords:
Victor Stinnerea3183f2013-12-03 01:08:00 +0100112
113Calls
114-----
115
Victor Stinner8464c242014-11-28 13:15:41 +0100116Most :mod:`asyncio` functions don't accept keywords. If you want to pass
117keywords to your callback, use :func:`functools.partial`. For example,
118``loop.call_soon(functools.partial(print, "Hello", flush=True))`` will call
119``print("Hello", flush=True)``.
120
121.. note::
122 :func:`functools.partial` is better than ``lambda`` functions, because
123 :mod:`asyncio` can inspect :func:`functools.partial` object to display
124 parameters in debug mode, whereas ``lambda`` functions have a poor
125 representation.
126
Guido van Rossumf68afd82016-08-08 09:41:21 -0700127.. method:: AbstractEventLoop.call_soon(callback, \*args)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100128
Victor Stinner4d5115c2014-12-15 17:50:55 +0100129 Arrange for a callback to be called as soon as possible. The callback is
130 called after :meth:`call_soon` returns, when control returns to the event
131 loop.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100132
Serhiy Storchaka4ecfa452016-05-16 09:31:54 +0300133 This operates as a :abbr:`FIFO (first-in, first-out)` queue, callbacks
134 are called in the order in which they are registered. Each callback
135 will be called exactly once.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100136
137 Any positional arguments after the callback will be passed to the
138 callback when it is called.
139
Yury Selivanov1096f762015-06-25 13:49:52 -0400140 An instance of :class:`asyncio.Handle` is returned, which can be
141 used to cancel the callback.
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500142
Victor Stinner8464c242014-11-28 13:15:41 +0100143 :ref:`Use functools.partial to pass keywords to the callback
144 <asyncio-pass-keywords>`.
145
Guido van Rossumf68afd82016-08-08 09:41:21 -0700146.. method:: AbstractEventLoop.call_soon_threadsafe(callback, \*args)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100147
148 Like :meth:`call_soon`, but thread safe.
149
Victor Stinner83704962015-02-25 14:24:15 +0100150 See the :ref:`concurrency and multithreading <asyncio-multithreading>`
151 section of the documentation.
152
Victor Stinnerea3183f2013-12-03 01:08:00 +0100153
Victor Stinner45b27ed2014-02-01 02:36:43 +0100154.. _asyncio-delayed-calls:
155
Victor Stinnerea3183f2013-12-03 01:08:00 +0100156Delayed calls
157-------------
158
159The event loop has its own internal clock for computing timeouts.
160Which clock is used depends on the (platform-specific) event loop
161implementation; ideally it is a monotonic clock. This will generally be
162a different clock than :func:`time.time`.
163
Victor Stinnerfd9d3742014-02-18 09:37:43 +0100164.. note::
165
166 Timeouts (relative *delay* or absolute *when*) should not exceed one day.
167
Victor Stinner45b27ed2014-02-01 02:36:43 +0100168
Guido van Rossumf68afd82016-08-08 09:41:21 -0700169.. method:: AbstractEventLoop.call_later(delay, callback, *args)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100170
171 Arrange for the *callback* to be called after the given *delay*
172 seconds (either an int or float).
173
Yury Selivanov1096f762015-06-25 13:49:52 -0400174 An instance of :class:`asyncio.Handle` is returned, which can be
175 used to cancel the callback.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100176
177 *callback* will be called exactly once per call to :meth:`call_later`.
178 If two callbacks are scheduled for exactly the same time, it is
179 undefined which will be called first.
180
181 The optional positional *args* will be passed to the callback when it
182 is called. If you want the callback to be called with some named
183 arguments, use a closure or :func:`functools.partial`.
184
Victor Stinner8464c242014-11-28 13:15:41 +0100185 :ref:`Use functools.partial to pass keywords to the callback
186 <asyncio-pass-keywords>`.
187
Guido van Rossumf68afd82016-08-08 09:41:21 -0700188.. method:: AbstractEventLoop.call_at(when, callback, *args)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100189
190 Arrange for the *callback* to be called at the given absolute timestamp
Berker Peksagb5563992014-11-07 19:51:07 +0200191 *when* (an int or float), using the same time reference as
Guido van Rossumf68afd82016-08-08 09:41:21 -0700192 :meth:`AbstractEventLoop.time`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100193
194 This method's behavior is the same as :meth:`call_later`.
195
Yury Selivanov1096f762015-06-25 13:49:52 -0400196 An instance of :class:`asyncio.Handle` is returned, which can be
197 used to cancel the callback.
198
Victor Stinner8464c242014-11-28 13:15:41 +0100199 :ref:`Use functools.partial to pass keywords to the callback
200 <asyncio-pass-keywords>`.
201
Guido van Rossumf68afd82016-08-08 09:41:21 -0700202.. method:: AbstractEventLoop.time()
Victor Stinnerea3183f2013-12-03 01:08:00 +0100203
204 Return the current time, as a :class:`float` value, according to the
205 event loop's internal clock.
206
Victor Stinner3e09e322013-12-03 01:22:06 +0100207.. seealso::
208
209 The :func:`asyncio.sleep` function.
210
Victor Stinnerea3183f2013-12-03 01:08:00 +0100211
Yury Selivanov950204d2016-05-16 16:23:00 -0400212Futures
213-------
214
Guido van Rossumf68afd82016-08-08 09:41:21 -0700215.. method:: AbstractEventLoop.create_future()
Yury Selivanov950204d2016-05-16 16:23:00 -0400216
217 Create an :class:`asyncio.Future` object attached to the loop.
218
219 This is a preferred way to create futures in asyncio, as event
220 loop implementations can provide alternative implementations
221 of the Future class (with better performance or instrumentation).
222
223 .. versionadded:: 3.5.2
224
225
Yury Selivanovbb961342015-06-25 11:54:34 -0400226Tasks
227-----
Victor Stinner530ef2f2014-07-08 12:39:10 +0200228
Guido van Rossumf68afd82016-08-08 09:41:21 -0700229.. method:: AbstractEventLoop.create_task(coro)
Victor Stinner530ef2f2014-07-08 12:39:10 +0200230
231 Schedule the execution of a :ref:`coroutine object <coroutine>`: wrap it in
232 a future. Return a :class:`Task` object.
233
234 Third-party event loops can use their own subclass of :class:`Task` for
235 interoperability. In this case, the result type is a subclass of
236 :class:`Task`.
237
Victor Stinner530ef2f2014-07-08 12:39:10 +0200238 .. versionadded:: 3.4.2
239
Guido van Rossumf68afd82016-08-08 09:41:21 -0700240.. method:: AbstractEventLoop.set_task_factory(factory)
Yury Selivanov71854612015-05-11 16:28:27 -0400241
242 Set a task factory that will be used by
Guido van Rossumf68afd82016-08-08 09:41:21 -0700243 :meth:`AbstractEventLoop.create_task`.
Yury Selivanov71854612015-05-11 16:28:27 -0400244
245 If *factory* is ``None`` the default task factory will be set.
246
247 If *factory* is a *callable*, it should have a signature matching
248 ``(loop, coro)``, where *loop* will be a reference to the active
249 event loop, *coro* will be a coroutine object. The callable
250 must return an :class:`asyncio.Future` compatible object.
251
252 .. versionadded:: 3.4.4
253
Guido van Rossumf68afd82016-08-08 09:41:21 -0700254.. method:: AbstractEventLoop.get_task_factory()
Yury Selivanov71854612015-05-11 16:28:27 -0400255
256 Return a task factory, or ``None`` if the default one is in use.
257
258 .. versionadded:: 3.4.4
259
Victor Stinner530ef2f2014-07-08 12:39:10 +0200260
Victor Stinnerea3183f2013-12-03 01:08:00 +0100261Creating connections
Victor Stinner0c6f1ca2013-12-03 01:46:39 +0100262--------------------
Victor Stinnerea3183f2013-12-03 01:08:00 +0100263
Andrew Svetlov51eb1c62017-12-20 20:24:43 +0200264.. coroutinemethod:: AbstractEventLoop.create_connection(protocol_factory, host=None, port=None, \*, ssl=None, family=0, proto=0, flags=0, sock=None, local_addr=None, server_hostname=None, ssl_handshake_timeout=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100265
266 Create a streaming transport connection to a given Internet *host* and
Victor Stinnera6919aa2014-02-19 13:32:34 +0100267 *port*: socket family :py:data:`~socket.AF_INET` or
268 :py:data:`~socket.AF_INET6` depending on *host* (or *family* if specified),
269 socket type :py:data:`~socket.SOCK_STREAM`. *protocol_factory* must be a
270 callable returning a :ref:`protocol <asyncio-protocol>` instance.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100271
Yury Selivanov19a44f62017-12-14 20:53:26 -0500272 This method will try to establish the connection in the background.
273 When successful, it returns a ``(transport, protocol)`` pair.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100274
275 The chronological synopsis of the underlying operation is as follows:
276
Victor Stinner9592edb2014-02-02 15:03:02 +0100277 #. The connection is established, and a :ref:`transport <asyncio-transport>`
Victor Stinnerea3183f2013-12-03 01:08:00 +0100278 is created to represent it.
279
280 #. *protocol_factory* is called without arguments and must return a
Victor Stinner9592edb2014-02-02 15:03:02 +0100281 :ref:`protocol <asyncio-protocol>` instance.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100282
283 #. The protocol instance is tied to the transport, and its
284 :meth:`connection_made` method is called.
285
286 #. The coroutine returns successfully with the ``(transport, protocol)``
287 pair.
288
289 The created transport is an implementation-dependent bidirectional stream.
290
291 .. note::
292 *protocol_factory* can be any kind of callable, not necessarily
293 a class. For example, if you want to use a pre-created
294 protocol instance, you can pass ``lambda: my_protocol``.
295
Martin Panterc04fb562016-02-10 05:44:01 +0000296 Options that change how the connection is created:
Victor Stinnerea3183f2013-12-03 01:08:00 +0100297
298 * *ssl*: if given and not false, a SSL/TLS transport is created
299 (by default a plain TCP transport is created). If *ssl* is
300 a :class:`ssl.SSLContext` object, this context is used to create
301 the transport; if *ssl* is :const:`True`, a context with some
302 unspecified default settings is used.
303
Berker Peksag9c1dba22014-09-28 00:00:58 +0300304 .. seealso:: :ref:`SSL/TLS security considerations <ssl-security>`
Antoine Pitrouc5e075f2014-03-22 18:19:11 +0100305
Victor Stinnerea3183f2013-12-03 01:08:00 +0100306 * *server_hostname*, is only for use together with *ssl*,
307 and sets or overrides the hostname that the target server's certificate
308 will be matched against. By default the value of the *host* argument
309 is used. If *host* is empty, there is no default and you must pass a
310 value for *server_hostname*. If *server_hostname* is an empty
311 string, hostname matching is disabled (which is a serious security
312 risk, allowing for man-in-the-middle-attacks).
313
314 * *family*, *proto*, *flags* are the optional address family, protocol
315 and flags to be passed through to getaddrinfo() for *host* resolution.
316 If given, these should all be integers from the corresponding
317 :mod:`socket` module constants.
318
319 * *sock*, if given, should be an existing, already connected
320 :class:`socket.socket` object to be used by the transport.
321 If *sock* is given, none of *host*, *port*, *family*, *proto*, *flags*
322 and *local_addr* should be specified.
323
324 * *local_addr*, if given, is a ``(local_host, local_port)`` tuple used
325 to bind the socket to locally. The *local_host* and *local_port*
326 are looked up using getaddrinfo(), similarly to *host* and *port*.
327
Neil Aspinallf7686c12017-12-19 19:45:42 +0000328 * *ssl_handshake_timeout* is (for an SSL connection) the time in seconds
329 to wait for the SSL handshake to complete before aborting the connection.
Andrew Svetlov51eb1c62017-12-20 20:24:43 +0200330 ``10.0`` seconds if ``None`` (default).
Neil Aspinallf7686c12017-12-19 19:45:42 +0000331
332 .. versionadded:: 3.7
333
334 The *ssl_handshake_timeout* parameter.
335
Victor Stinner60208a12015-09-15 22:41:52 +0200336 .. versionchanged:: 3.5
337
338 On Windows with :class:`ProactorEventLoop`, SSL/TLS is now supported.
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200339
Victor Stinnerc8ea8132014-01-23 11:02:09 +0100340 .. seealso::
341
342 The :func:`open_connection` function can be used to get a pair of
343 (:class:`StreamReader`, :class:`StreamWriter`) instead of a protocol.
344
Victor Stinnerea3183f2013-12-03 01:08:00 +0100345
Guido van Rossumf68afd82016-08-08 09:41:21 -0700346.. coroutinemethod:: AbstractEventLoop.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 +0100347
Quentin Dawansfe4ea9c2017-10-30 14:43:02 +0100348 Create datagram connection: socket family :py:data:`~socket.AF_INET`,
349 :py:data:`~socket.AF_INET6` or :py:data:`~socket.AF_UNIX` depending on
350 *host* (or *family* if specified), socket type
351 :py:data:`~socket.SOCK_DGRAM`. *protocol_factory* must be a
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700352 callable returning a :ref:`protocol <asyncio-protocol>` instance.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100353
Yury Selivanov19a44f62017-12-14 20:53:26 -0500354 This method will try to establish the connection in the background.
355 When successful, the it returns a ``(transport, protocol)`` pair.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100356
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700357 Options changing how the connection is created:
358
359 * *local_addr*, if given, is a ``(local_host, local_port)`` tuple used
360 to bind the socket to locally. The *local_host* and *local_port*
361 are looked up using :meth:`getaddrinfo`.
362
363 * *remote_addr*, if given, is a ``(remote_host, remote_port)`` tuple used
364 to connect the socket to a remote address. The *remote_host* and
365 *remote_port* are looked up using :meth:`getaddrinfo`.
366
367 * *family*, *proto*, *flags* are the optional address family, protocol
368 and flags to be passed through to :meth:`getaddrinfo` for *host*
369 resolution. If given, these should all be integers from the
370 corresponding :mod:`socket` module constants.
371
372 * *reuse_address* tells the kernel to reuse a local socket in
373 TIME_WAIT state, without waiting for its natural timeout to
Serhiy Storchaka4adf01c2016-10-19 18:30:05 +0300374 expire. If not specified will automatically be set to ``True`` on
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700375 UNIX.
376
377 * *reuse_port* tells the kernel to allow this endpoint to be bound to the
378 same port as other existing endpoints are bound to, so long as they all
379 set this flag when being created. This option is not supported on Windows
380 and some UNIX's. If the :py:data:`~socket.SO_REUSEPORT` constant is not
381 defined then this capability is unsupported.
382
383 * *allow_broadcast* tells the kernel to allow this endpoint to send
384 messages to the broadcast address.
385
386 * *sock* can optionally be specified in order to use a preexisting,
387 already connected, :class:`socket.socket` object to be used by the
388 transport. If specified, *local_addr* and *remote_addr* should be omitted
389 (must be :const:`None`).
Victor Stinnera6919aa2014-02-19 13:32:34 +0100390
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200391 On Windows with :class:`ProactorEventLoop`, this method is not supported.
392
Victor Stinnerc7edffd2014-10-12 11:24:26 +0200393 See :ref:`UDP echo client protocol <asyncio-udp-echo-client-protocol>` and
394 :ref:`UDP echo server protocol <asyncio-udp-echo-server-protocol>` examples.
395
Victor Stinnera6919aa2014-02-19 13:32:34 +0100396
Andrew Svetlov51eb1c62017-12-20 20:24:43 +0200397.. coroutinemethod:: AbstractEventLoop.create_unix_connection(protocol_factory, path=None, \*, ssl=None, sock=None, server_hostname=None, ssl_handshake_timeout=None)
Victor Stinnera6919aa2014-02-19 13:32:34 +0100398
399 Create UNIX connection: socket family :py:data:`~socket.AF_UNIX`, socket
400 type :py:data:`~socket.SOCK_STREAM`. The :py:data:`~socket.AF_UNIX` socket
401 family is used to communicate between processes on the same machine
402 efficiently.
403
Yury Selivanov19a44f62017-12-14 20:53:26 -0500404 This method will try to establish the connection in the background.
405 When successful, the it returns a ``(transport, protocol)`` pair.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100406
Guido van Rossum9e80eeb2016-11-03 14:17:25 -0700407 *path* is the name of a UNIX domain socket, and is required unless a *sock*
Yury Selivanov423fd362017-11-20 17:26:28 -0500408 parameter is specified. Abstract UNIX sockets, :class:`str`,
409 :class:`bytes`, and :class:`~pathlib.Path` paths are supported.
Guido van Rossum9e80eeb2016-11-03 14:17:25 -0700410
Guido van Rossumf68afd82016-08-08 09:41:21 -0700411 See the :meth:`AbstractEventLoop.create_connection` method for parameters.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100412
413 Availability: UNIX.
414
Neil Aspinallf7686c12017-12-19 19:45:42 +0000415 .. versionadded:: 3.7
416
417 The *ssl_handshake_timeout* parameter.
418
Yury Selivanov423fd362017-11-20 17:26:28 -0500419 .. versionchanged:: 3.7
420
421 The *path* parameter can now be a :class:`~pathlib.Path` object.
422
Victor Stinnera6919aa2014-02-19 13:32:34 +0100423
Victor Stinnerea3183f2013-12-03 01:08:00 +0100424Creating listening connections
425------------------------------
426
Andrew Svetlov51eb1c62017-12-20 20:24:43 +0200427.. coroutinemethod:: AbstractEventLoop.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, ssl_handshake_timeout=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100428
Victor Stinner33f6abe2014-10-12 20:36:04 +0200429 Create a TCP server (socket type :data:`~socket.SOCK_STREAM`) bound to
430 *host* and *port*.
431
432 Return a :class:`Server` object, its :attr:`~Server.sockets` attribute
433 contains created sockets. Use the :meth:`Server.close` method to stop the
434 server: close listening sockets.
435
436 Parameters:
437
Victor Stinner5e4a7d82015-09-21 18:33:43 +0200438 * The *host* parameter can be a string, in that case the TCP server is
439 bound to *host* and *port*. The *host* parameter can also be a sequence
440 of strings and in that case the TCP server is bound to all hosts of the
441 sequence. If *host* is an empty string or ``None``, all interfaces are
442 assumed and a list of multiple sockets will be returned (most likely one
443 for IPv4 and another one for IPv6).
Victor Stinner33f6abe2014-10-12 20:36:04 +0200444
445 * *family* can be set to either :data:`socket.AF_INET` or
446 :data:`~socket.AF_INET6` to force the socket to use IPv4 or IPv6. If not set
447 it will be determined from host (defaults to :data:`socket.AF_UNSPEC`).
448
449 * *flags* is a bitmask for :meth:`getaddrinfo`.
450
451 * *sock* can optionally be specified in order to use a preexisting
452 socket object. If specified, *host* and *port* should be omitted (must be
453 :const:`None`).
454
455 * *backlog* is the maximum number of queued connections passed to
456 :meth:`~socket.socket.listen` (defaults to 100).
457
458 * *ssl* can be set to an :class:`~ssl.SSLContext` to enable SSL over the
459 accepted connections.
460
461 * *reuse_address* tells the kernel to reuse a local socket in
462 TIME_WAIT state, without waiting for its natural timeout to
Serhiy Storchaka4adf01c2016-10-19 18:30:05 +0300463 expire. If not specified will automatically be set to ``True`` on
Victor Stinner33f6abe2014-10-12 20:36:04 +0200464 UNIX.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100465
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700466 * *reuse_port* tells the kernel to allow this endpoint to be bound to the
467 same port as other existing endpoints are bound to, so long as they all
468 set this flag when being created. This option is not supported on
469 Windows.
470
Neil Aspinallf7686c12017-12-19 19:45:42 +0000471 * *ssl_handshake_timeout* is (for an SSL server) the time in seconds to wait
472 for the SSL handshake to complete before aborting the connection.
Andrew Svetlov51eb1c62017-12-20 20:24:43 +0200473 ``10.0`` seconds if ``None`` (default).
Neil Aspinallf7686c12017-12-19 19:45:42 +0000474
475 .. versionadded:: 3.7
476
477 The *ssl_handshake_timeout* parameter.
478
Victor Stinner60208a12015-09-15 22:41:52 +0200479 .. versionchanged:: 3.5
480
481 On Windows with :class:`ProactorEventLoop`, SSL/TLS is now supported.
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200482
Victor Stinnerc8ea8132014-01-23 11:02:09 +0100483 .. seealso::
484
485 The function :func:`start_server` creates a (:class:`StreamReader`,
486 :class:`StreamWriter`) pair and calls back a function with this pair.
487
Victor Stinner7b58a2b2015-09-21 18:41:05 +0200488 .. versionchanged:: 3.5.1
Victor Stinner5e4a7d82015-09-21 18:33:43 +0200489
490 The *host* parameter can now be a sequence of strings.
491
Victor Stinnerea3183f2013-12-03 01:08:00 +0100492
Andrew Svetlov51eb1c62017-12-20 20:24:43 +0200493.. coroutinemethod:: AbstractEventLoop.create_unix_server(protocol_factory, path=None, \*, sock=None, backlog=100, ssl=None, ssl_handshake_timeout=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100494
Guido van Rossumf68afd82016-08-08 09:41:21 -0700495 Similar to :meth:`AbstractEventLoop.create_server`, but specific to the
Victor Stinnera6919aa2014-02-19 13:32:34 +0100496 socket family :py:data:`~socket.AF_UNIX`.
497
Yury Selivanov423fd362017-11-20 17:26:28 -0500498 *path* is the name of a UNIX domain socket, and is required unless a *sock*
499 parameter is specified. Abstract UNIX sockets, :class:`str`,
500 :class:`bytes`, and :class:`~pathlib.Path` paths are supported.
501
Victor Stinnera6919aa2014-02-19 13:32:34 +0100502 Availability: UNIX.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100503
Neil Aspinallf7686c12017-12-19 19:45:42 +0000504 .. versionadded:: 3.7
505
506 The *ssl_handshake_timeout* parameter.
507
Yury Selivanov423fd362017-11-20 17:26:28 -0500508 .. versionchanged:: 3.7
509
510 The *path* parameter can now be a :class:`~pathlib.Path` object.
511
Andrew Svetlov51eb1c62017-12-20 20:24:43 +0200512.. coroutinemethod:: BaseEventLoop.connect_accepted_socket(protocol_factory, sock, \*, ssl=None, ssl_handshake_timeout=None)
Yury Selivanov3b3a1412016-11-07 15:35:25 -0500513
514 Handle an accepted connection.
515
516 This is used by servers that accept connections outside of
517 asyncio but that use asyncio to handle them.
518
519 Parameters:
520
521 * *sock* is a preexisting socket object returned from an ``accept``
522 call.
523
524 * *ssl* can be set to an :class:`~ssl.SSLContext` to enable SSL over the
525 accepted connections.
526
Neil Aspinallf7686c12017-12-19 19:45:42 +0000527 * *ssl_handshake_timeout* is (for an SSL connection) the time in seconds to
528 wait for the SSL handshake to complete before aborting the connection.
Andrew Svetlov51eb1c62017-12-20 20:24:43 +0200529 ``10.0`` seconds if ``None`` (default).
Neil Aspinallf7686c12017-12-19 19:45:42 +0000530
Yury Selivanov19a44f62017-12-14 20:53:26 -0500531 When completed it returns a ``(transport, protocol)`` pair.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100532
Neil Aspinallf7686c12017-12-19 19:45:42 +0000533 .. versionadded:: 3.7
534
535 The *ssl_handshake_timeout* parameter.
536
AraHaan431665b2017-11-21 11:06:26 -0500537 .. versionadded:: 3.5.3
538
539
Victor Stinnerc1567df2014-02-08 23:22:58 +0100540Watch file descriptors
541----------------------
542
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200543On Windows with :class:`SelectorEventLoop`, only socket handles are supported
544(ex: pipe file descriptors are not supported).
545
546On Windows with :class:`ProactorEventLoop`, these methods are not supported.
547
Guido van Rossumf68afd82016-08-08 09:41:21 -0700548.. method:: AbstractEventLoop.add_reader(fd, callback, \*args)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100549
550 Start watching the file descriptor for read availability and then call the
551 *callback* with specified arguments.
552
Victor Stinner8464c242014-11-28 13:15:41 +0100553 :ref:`Use functools.partial to pass keywords to the callback
554 <asyncio-pass-keywords>`.
555
Guido van Rossumf68afd82016-08-08 09:41:21 -0700556.. method:: AbstractEventLoop.remove_reader(fd)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100557
558 Stop watching the file descriptor for read availability.
559
Guido van Rossumf68afd82016-08-08 09:41:21 -0700560.. method:: AbstractEventLoop.add_writer(fd, callback, \*args)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100561
562 Start watching the file descriptor for write availability and then call the
563 *callback* with specified arguments.
564
Victor Stinner8464c242014-11-28 13:15:41 +0100565 :ref:`Use functools.partial to pass keywords to the callback
566 <asyncio-pass-keywords>`.
567
Guido van Rossumf68afd82016-08-08 09:41:21 -0700568.. method:: AbstractEventLoop.remove_writer(fd)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100569
570 Stop watching the file descriptor for write availability.
571
Victor Stinner04e6df32014-10-11 16:16:27 +0200572The :ref:`watch a file descriptor for read events <asyncio-watch-read-event>`
Guido van Rossumf68afd82016-08-08 09:41:21 -0700573example uses the low-level :meth:`AbstractEventLoop.add_reader` method to register
Victor Stinner04e6df32014-10-11 16:16:27 +0200574the file descriptor of a socket.
575
Victor Stinnerc1567df2014-02-08 23:22:58 +0100576
577Low-level socket operations
578---------------------------
579
Guido van Rossumf68afd82016-08-08 09:41:21 -0700580.. coroutinemethod:: AbstractEventLoop.sock_recv(sock, nbytes)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100581
Yury Selivanov55c50842016-06-08 12:48:15 -0400582 Receive data from the socket. Modeled after blocking
583 :meth:`socket.socket.recv` method.
584
585 The return value is a bytes object
Victor Stinnerc1567df2014-02-08 23:22:58 +0100586 representing the data received. The maximum amount of data to be received
587 at once is specified by *nbytes*.
588
Victor Stinnerd84fd732014-08-26 01:01:59 +0200589 With :class:`SelectorEventLoop` event loop, the socket *sock* must be
590 non-blocking.
Victor Stinnerec2ce092014-07-29 23:12:22 +0200591
Yury Selivanov19a44f62017-12-14 20:53:26 -0500592 .. versionchanged:: 3.7
593 Even though the method was always documented as a coroutine
594 method, before Python 3.7 it returned a :class:`Future`.
595 Since Python 3.7, this is an ``async def`` method.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100596
Antoine Pitrou525f40d2017-10-19 21:46:40 +0200597.. coroutinemethod:: AbstractEventLoop.sock_recv_into(sock, buf)
598
599 Receive data from the socket. Modeled after blocking
600 :meth:`socket.socket.recv_into` method.
601
602 The received data is written into *buf* (a writable buffer).
603 The return value is the number of bytes written.
604
605 With :class:`SelectorEventLoop` event loop, the socket *sock* must be
606 non-blocking.
607
Antoine Pitrou525f40d2017-10-19 21:46:40 +0200608 .. versionadded:: 3.7
609
Guido van Rossumf68afd82016-08-08 09:41:21 -0700610.. coroutinemethod:: AbstractEventLoop.sock_sendall(sock, data)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100611
Yury Selivanov55c50842016-06-08 12:48:15 -0400612 Send data to the socket. Modeled after blocking
613 :meth:`socket.socket.sendall` method.
614
615 The socket must be connected to a remote socket.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100616 This method continues to send data from *data* until either all data has
617 been sent or an error occurs. ``None`` is returned on success. On error,
618 an exception is raised, and there is no way to determine how much data, if
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500619 any, was successfully processed by the receiving end of the connection.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100620
Victor Stinnerd84fd732014-08-26 01:01:59 +0200621 With :class:`SelectorEventLoop` event loop, the socket *sock* must be
622 non-blocking.
Victor Stinnerec2ce092014-07-29 23:12:22 +0200623
Yury Selivanov19a44f62017-12-14 20:53:26 -0500624 .. versionchanged:: 3.7
625 Even though the method was always documented as a coroutine
626 method, before Python 3.7 it returned an :class:`Future`.
627 Since Python 3.7, this is an ``async def`` method.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100628
Guido van Rossumf68afd82016-08-08 09:41:21 -0700629.. coroutinemethod:: AbstractEventLoop.sock_connect(sock, address)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100630
Yury Selivanov55c50842016-06-08 12:48:15 -0400631 Connect to a remote socket at *address*. Modeled after
632 blocking :meth:`socket.socket.connect` method.
Victor Stinner1b0580b2014-02-13 09:24:37 +0100633
Victor Stinnerd84fd732014-08-26 01:01:59 +0200634 With :class:`SelectorEventLoop` event loop, the socket *sock* must be
635 non-blocking.
Victor Stinnerec2ce092014-07-29 23:12:22 +0200636
Yury Selivanov55c50842016-06-08 12:48:15 -0400637 .. versionchanged:: 3.5.2
638 ``address`` no longer needs to be resolved. ``sock_connect``
639 will try to check if the *address* is already resolved by calling
640 :func:`socket.inet_pton`. If not,
Guido van Rossumf68afd82016-08-08 09:41:21 -0700641 :meth:`AbstractEventLoop.getaddrinfo` will be used to resolve the
Yury Selivanov55c50842016-06-08 12:48:15 -0400642 *address*.
643
Victor Stinnerc1567df2014-02-08 23:22:58 +0100644 .. seealso::
645
Guido van Rossumf68afd82016-08-08 09:41:21 -0700646 :meth:`AbstractEventLoop.create_connection`
Yury Selivanov55c50842016-06-08 12:48:15 -0400647 and :func:`asyncio.open_connection() <open_connection>`.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100648
649
Guido van Rossumf68afd82016-08-08 09:41:21 -0700650.. coroutinemethod:: AbstractEventLoop.sock_accept(sock)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100651
Yury Selivanov55c50842016-06-08 12:48:15 -0400652 Accept a connection. Modeled after blocking
653 :meth:`socket.socket.accept`.
654
655 The socket must be bound to an address and listening
Victor Stinnerc1567df2014-02-08 23:22:58 +0100656 for connections. The return value is a pair ``(conn, address)`` where *conn*
657 is a *new* socket object usable to send and receive data on the connection,
658 and *address* is the address bound to the socket on the other end of the
659 connection.
660
Victor Stinnerec2ce092014-07-29 23:12:22 +0200661 The socket *sock* must be non-blocking.
662
Yury Selivanov19a44f62017-12-14 20:53:26 -0500663 .. versionchanged:: 3.7
664 Even though the method was always documented as a coroutine
665 method, before Python 3.7 it returned a :class:`Future`.
666 Since Python 3.7, this is an ``async def`` method.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100667
668 .. seealso::
669
Guido van Rossumf68afd82016-08-08 09:41:21 -0700670 :meth:`AbstractEventLoop.create_server` and :func:`start_server`.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100671
672
673Resolve host name
674-----------------
Victor Stinnerea3183f2013-12-03 01:08:00 +0100675
Guido van Rossumf68afd82016-08-08 09:41:21 -0700676.. coroutinemethod:: AbstractEventLoop.getaddrinfo(host, port, \*, family=0, type=0, proto=0, flags=0)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100677
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500678 This method is a :ref:`coroutine <coroutine>`, similar to
679 :meth:`socket.getaddrinfo` function but non-blocking.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100680
Guido van Rossumf68afd82016-08-08 09:41:21 -0700681.. coroutinemethod:: AbstractEventLoop.getnameinfo(sockaddr, flags=0)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100682
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500683 This method is a :ref:`coroutine <coroutine>`, similar to
684 :meth:`socket.getnameinfo` function but non-blocking.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100685
686
Victor Stinner984600f2014-03-25 09:40:26 +0100687Connect pipes
688-------------
Victor Stinnerea3183f2013-12-03 01:08:00 +0100689
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200690On Windows with :class:`SelectorEventLoop`, these methods are not supported.
691Use :class:`ProactorEventLoop` to support pipes on Windows.
692
Guido van Rossumf68afd82016-08-08 09:41:21 -0700693.. coroutinemethod:: AbstractEventLoop.connect_read_pipe(protocol_factory, pipe)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100694
Victor Stinnerd84fd732014-08-26 01:01:59 +0200695 Register read pipe in eventloop.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100696
697 *protocol_factory* should instantiate object with :class:`Protocol`
Victor Stinnera5b257a2014-05-29 00:14:03 +0200698 interface. *pipe* is a :term:`file-like object <file object>`.
699 Return pair ``(transport, protocol)``, where *transport* supports the
Victor Stinnerea3183f2013-12-03 01:08:00 +0100700 :class:`ReadTransport` interface.
701
Victor Stinnerd84fd732014-08-26 01:01:59 +0200702 With :class:`SelectorEventLoop` event loop, the *pipe* is set to
703 non-blocking mode.
704
Guido van Rossumf68afd82016-08-08 09:41:21 -0700705.. coroutinemethod:: AbstractEventLoop.connect_write_pipe(protocol_factory, pipe)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100706
707 Register write pipe in eventloop.
708
709 *protocol_factory* should instantiate object with :class:`BaseProtocol`
Victor Stinner2cef3002014-10-23 22:38:46 +0200710 interface. *pipe* is :term:`file-like object <file object>`.
711 Return pair ``(transport, protocol)``, where *transport* supports
Victor Stinnerea3183f2013-12-03 01:08:00 +0100712 :class:`WriteTransport` interface.
713
Victor Stinnerd84fd732014-08-26 01:01:59 +0200714 With :class:`SelectorEventLoop` event loop, the *pipe* is set to
715 non-blocking mode.
716
Victor Stinner08444382014-02-02 22:43:39 +0100717.. seealso::
718
Guido van Rossumf68afd82016-08-08 09:41:21 -0700719 The :meth:`AbstractEventLoop.subprocess_exec` and
720 :meth:`AbstractEventLoop.subprocess_shell` methods.
Victor Stinner08444382014-02-02 22:43:39 +0100721
Victor Stinnerea3183f2013-12-03 01:08:00 +0100722
Victor Stinner8b863482014-01-27 10:07:50 +0100723UNIX signals
724------------
725
726Availability: UNIX only.
727
Guido van Rossumf68afd82016-08-08 09:41:21 -0700728.. method:: AbstractEventLoop.add_signal_handler(signum, callback, \*args)
Victor Stinner8b863482014-01-27 10:07:50 +0100729
730 Add a handler for a signal.
731
732 Raise :exc:`ValueError` if the signal number is invalid or uncatchable.
733 Raise :exc:`RuntimeError` if there is a problem setting up the handler.
734
Victor Stinner8464c242014-11-28 13:15:41 +0100735 :ref:`Use functools.partial to pass keywords to the callback
736 <asyncio-pass-keywords>`.
737
Guido van Rossumf68afd82016-08-08 09:41:21 -0700738.. method:: AbstractEventLoop.remove_signal_handler(sig)
Victor Stinner8b863482014-01-27 10:07:50 +0100739
740 Remove a handler for a signal.
741
742 Return ``True`` if a signal handler was removed, ``False`` if not.
743
744.. seealso::
745
746 The :mod:`signal` module.
747
748
Victor Stinnerea3183f2013-12-03 01:08:00 +0100749Executor
750--------
751
752Call a function in an :class:`~concurrent.futures.Executor` (pool of threads or
753pool of processes). By default, an event loop uses a thread pool executor
754(:class:`~concurrent.futures.ThreadPoolExecutor`).
755
Guido van Rossumf68afd82016-08-08 09:41:21 -0700756.. coroutinemethod:: AbstractEventLoop.run_in_executor(executor, func, \*args)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100757
Andrew Svetlov1c62b522015-10-01 09:48:08 +0300758 Arrange for a *func* to be called in the specified executor.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100759
Larry Hastings3732ed22014-03-15 21:13:56 -0700760 The *executor* argument should be an :class:`~concurrent.futures.Executor`
761 instance. The default executor is used if *executor* is ``None``.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100762
Andrew Svetlov1c62b522015-10-01 09:48:08 +0300763 :ref:`Use functools.partial to pass keywords to the *func*
Victor Stinner8464c242014-11-28 13:15:41 +0100764 <asyncio-pass-keywords>`.
765
Yury Selivanove8a60452016-10-21 17:40:42 -0400766 .. versionchanged:: 3.5.3
767 :meth:`BaseEventLoop.run_in_executor` no longer configures the
768 ``max_workers`` of the thread pool executor it creates, instead
769 leaving it up to the thread pool executor
770 (:class:`~concurrent.futures.ThreadPoolExecutor`) to set the
771 default.
772
Yury Selivanov19a44f62017-12-14 20:53:26 -0500773 .. versionchanged:: 3.7
774 Even though the method was always documented as a coroutine
775 method, before Python 3.7 it returned a :class:`Future`.
776 Since Python 3.7, this is an ``async def`` method.
777
Guido van Rossumf68afd82016-08-08 09:41:21 -0700778.. method:: AbstractEventLoop.set_default_executor(executor)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100779
780 Set the default executor used by :meth:`run_in_executor`.
781
782
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500783Error Handling API
784------------------
785
Martin Panterc04fb562016-02-10 05:44:01 +0000786Allows customizing how exceptions are handled in the event loop.
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500787
Guido van Rossumf68afd82016-08-08 09:41:21 -0700788.. method:: AbstractEventLoop.set_exception_handler(handler)
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500789
790 Set *handler* as the new event loop exception handler.
791
792 If *handler* is ``None``, the default exception handler will
793 be set.
794
795 If *handler* is a callable object, it should have a
796 matching signature to ``(loop, context)``, where ``loop``
797 will be a reference to the active event loop, ``context``
798 will be a ``dict`` object (see :meth:`call_exception_handler`
799 documentation for details about context).
800
Guido van Rossumf68afd82016-08-08 09:41:21 -0700801.. method:: AbstractEventLoop.get_exception_handler()
Yury Selivanov950204d2016-05-16 16:23:00 -0400802
803 Return the exception handler, or ``None`` if the default one
804 is in use.
805
806 .. versionadded:: 3.5.2
807
Guido van Rossumf68afd82016-08-08 09:41:21 -0700808.. method:: AbstractEventLoop.default_exception_handler(context)
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500809
810 Default exception handler.
811
812 This is called when an exception occurs and no exception
813 handler is set, and can be called by a custom exception
814 handler that wants to defer to the default behavior.
815
816 *context* parameter has the same meaning as in
817 :meth:`call_exception_handler`.
818
Guido van Rossumf68afd82016-08-08 09:41:21 -0700819.. method:: AbstractEventLoop.call_exception_handler(context)
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500820
821 Call the current event loop exception handler.
822
823 *context* is a ``dict`` object containing the following keys
824 (new keys may be introduced later):
825
826 * 'message': Error message;
827 * 'exception' (optional): Exception object;
828 * 'future' (optional): :class:`asyncio.Future` instance;
829 * 'handle' (optional): :class:`asyncio.Handle` instance;
830 * 'protocol' (optional): :ref:`Protocol <asyncio-protocol>` instance;
831 * 'transport' (optional): :ref:`Transport <asyncio-transport>` instance;
832 * 'socket' (optional): :class:`socket.socket` instance.
833
834 .. note::
835
836 Note: this method should not be overloaded in subclassed
837 event loops. For any custom exception handling, use
838 :meth:`set_exception_handler()` method.
839
Victor Stinner0f3e6bc2014-02-19 23:15:02 +0100840Debug mode
841----------
842
Guido van Rossumf68afd82016-08-08 09:41:21 -0700843.. method:: AbstractEventLoop.get_debug()
Victor Stinner0f3e6bc2014-02-19 23:15:02 +0100844
Victor Stinner7b7120e2014-06-23 00:12:14 +0200845 Get the debug mode (:class:`bool`) of the event loop.
846
847 The default value is ``True`` if the environment variable
848 :envvar:`PYTHONASYNCIODEBUG` is set to a non-empty string, ``False``
849 otherwise.
Victor Stinner0f3e6bc2014-02-19 23:15:02 +0100850
Victor Stinner64d750b2014-06-18 03:25:23 +0200851 .. versionadded:: 3.4.2
852
Guido van Rossumf68afd82016-08-08 09:41:21 -0700853.. method:: AbstractEventLoop.set_debug(enabled: bool)
Victor Stinner0f3e6bc2014-02-19 23:15:02 +0100854
855 Set the debug mode of the event loop.
856
Victor Stinner64d750b2014-06-18 03:25:23 +0200857 .. versionadded:: 3.4.2
858
Victor Stinner0f3e6bc2014-02-19 23:15:02 +0100859.. seealso::
860
Victor Stinner62511fd2014-06-23 00:36:11 +0200861 The :ref:`debug mode of asyncio <asyncio-debug-mode>`.
Victor Stinner0f3e6bc2014-02-19 23:15:02 +0100862
Victor Stinner8c462c52014-01-24 18:11:43 +0100863Server
864------
865
Victor Stinner8ebeb032014-07-11 23:47:40 +0200866.. class:: Server
Victor Stinner8c462c52014-01-24 18:11:43 +0100867
Victor Stinner8ebeb032014-07-11 23:47:40 +0200868 Server listening on sockets.
869
Guido van Rossumf68afd82016-08-08 09:41:21 -0700870 Object created by the :meth:`AbstractEventLoop.create_server` method and the
R David Murray756f0b12015-01-29 19:53:33 -0500871 :func:`start_server` function. Don't instantiate the class directly.
Victor Stinner8c462c52014-01-24 18:11:43 +0100872
873 .. method:: close()
874
Victor Stinner4bfb14a2014-07-12 03:20:24 +0200875 Stop serving: close listening sockets and set the :attr:`sockets`
876 attribute to ``None``.
877
Berker Peksag49c9edf2016-01-20 07:14:22 +0200878 The sockets that represent existing incoming client connections are left
879 open.
Victor Stinner8ebeb032014-07-11 23:47:40 +0200880
Berker Peksag49c9edf2016-01-20 07:14:22 +0200881 The server is closed asynchronously, use the :meth:`wait_closed`
882 coroutine to wait until the server is closed.
Victor Stinner8c462c52014-01-24 18:11:43 +0100883
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100884 .. coroutinemethod:: wait_closed()
Victor Stinner8c462c52014-01-24 18:11:43 +0100885
Victor Stinner8ebeb032014-07-11 23:47:40 +0200886 Wait until the :meth:`close` method completes.
887
Victor Stinner8ebeb032014-07-11 23:47:40 +0200888 .. attribute:: sockets
889
890 List of :class:`socket.socket` objects the server is listening to, or
891 ``None`` if the server is closed.
Victor Stinner8c462c52014-01-24 18:11:43 +0100892
893
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500894Handle
895------
896
897.. class:: Handle
898
Guido van Rossumf68afd82016-08-08 09:41:21 -0700899 A callback wrapper object returned by :func:`AbstractEventLoop.call_soon`,
900 :func:`AbstractEventLoop.call_soon_threadsafe`, :func:`AbstractEventLoop.call_later`,
901 and :func:`AbstractEventLoop.call_at`.
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500902
903 .. method:: cancel()
904
Yury Selivanov1096f762015-06-25 13:49:52 -0400905 Cancel the call. If the callback is already canceled or executed,
906 this method has no effect.
Victor Stinneraea82292014-07-08 23:42:38 +0200907
Marat Sharafutdinov69cfed12017-11-07 12:06:05 +0300908 .. method:: cancelled()
909
910 Return ``True`` if the call was cancelled.
911
912 .. versionadded:: 3.7
913
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500914
Victor Stinner6888b962014-10-11 16:15:58 +0200915Event loop examples
Victor Stinnera092a612015-01-09 15:58:41 +0100916-------------------
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500917
Victor Stinner3e09e322013-12-03 01:22:06 +0100918.. _asyncio-hello-world-callback:
Victor Stinnerea3183f2013-12-03 01:08:00 +0100919
Victor Stinner7f314ed2014-10-15 18:49:16 +0200920Hello World with call_soon()
Victor Stinnera092a612015-01-09 15:58:41 +0100921^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +0100922
Guido van Rossumf68afd82016-08-08 09:41:21 -0700923Example using the :meth:`AbstractEventLoop.call_soon` method to schedule a
Victor Stinner7f314ed2014-10-15 18:49:16 +0200924callback. The callback displays ``"Hello World"`` and then stops the event
925loop::
Victor Stinnerea3183f2013-12-03 01:08:00 +0100926
927 import asyncio
928
Victor Stinner7f314ed2014-10-15 18:49:16 +0200929 def hello_world(loop):
Victor Stinnerea3183f2013-12-03 01:08:00 +0100930 print('Hello World')
Victor Stinner7f314ed2014-10-15 18:49:16 +0200931 loop.stop()
Victor Stinnerea3183f2013-12-03 01:08:00 +0100932
933 loop = asyncio.get_event_loop()
Victor Stinner7f314ed2014-10-15 18:49:16 +0200934
935 # Schedule a call to hello_world()
936 loop.call_soon(hello_world, loop)
937
938 # Blocking call interrupted by loop.stop()
939 loop.run_forever()
940 loop.close()
Victor Stinnerea3183f2013-12-03 01:08:00 +0100941
Victor Stinner3e09e322013-12-03 01:22:06 +0100942.. seealso::
Victor Stinnerea3183f2013-12-03 01:08:00 +0100943
Victor Stinner6888b962014-10-11 16:15:58 +0200944 The :ref:`Hello World coroutine <asyncio-hello-world-coroutine>` example
945 uses a :ref:`coroutine <coroutine>`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100946
Victor Stinner8b863482014-01-27 10:07:50 +0100947
Victor Stinner7f314ed2014-10-15 18:49:16 +0200948.. _asyncio-date-callback:
949
950Display the current date with call_later()
Victor Stinnera092a612015-01-09 15:58:41 +0100951^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinner7f314ed2014-10-15 18:49:16 +0200952
953Example of callback displaying the current date every second. The callback uses
Guido van Rossumf68afd82016-08-08 09:41:21 -0700954the :meth:`AbstractEventLoop.call_later` method to reschedule itself during 5
Victor Stinner7f314ed2014-10-15 18:49:16 +0200955seconds, and then stops the event loop::
956
957 import asyncio
958 import datetime
959
960 def display_date(end_time, loop):
961 print(datetime.datetime.now())
962 if (loop.time() + 1.0) < end_time:
963 loop.call_later(1, display_date, end_time, loop)
964 else:
965 loop.stop()
966
967 loop = asyncio.get_event_loop()
968
969 # Schedule the first call to display_date()
970 end_time = loop.time() + 5.0
971 loop.call_soon(display_date, end_time, loop)
972
973 # Blocking call interrupted by loop.stop()
974 loop.run_forever()
975 loop.close()
976
977.. seealso::
978
979 The :ref:`coroutine displaying the current date
980 <asyncio-date-coroutine>` example uses a :ref:`coroutine
981 <coroutine>`.
982
983
Victor Stinner04e6df32014-10-11 16:16:27 +0200984.. _asyncio-watch-read-event:
Victor Stinner8b863482014-01-27 10:07:50 +0100985
Victor Stinner04e6df32014-10-11 16:16:27 +0200986Watch a file descriptor for read events
Victor Stinnera092a612015-01-09 15:58:41 +0100987^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinner04e6df32014-10-11 16:16:27 +0200988
989Wait until a file descriptor received some data using the
Guido van Rossumf68afd82016-08-08 09:41:21 -0700990:meth:`AbstractEventLoop.add_reader` method and then close the event loop::
Victor Stinner04e6df32014-10-11 16:16:27 +0200991
992 import asyncio
Victor Stinnerac577d72017-11-28 21:33:20 +0100993 from socket import socketpair
Victor Stinner04e6df32014-10-11 16:16:27 +0200994
995 # Create a pair of connected file descriptors
Victor Stinnerccd8e342014-10-11 16:30:02 +0200996 rsock, wsock = socketpair()
Victor Stinner04e6df32014-10-11 16:16:27 +0200997 loop = asyncio.get_event_loop()
998
999 def reader():
1000 data = rsock.recv(100)
1001 print("Received:", data.decode())
Victor Stinner2cef3002014-10-23 22:38:46 +02001002 # We are done: unregister the file descriptor
Victor Stinner04e6df32014-10-11 16:16:27 +02001003 loop.remove_reader(rsock)
1004 # Stop the event loop
1005 loop.stop()
1006
Victor Stinner2cef3002014-10-23 22:38:46 +02001007 # Register the file descriptor for read event
Victor Stinner04e6df32014-10-11 16:16:27 +02001008 loop.add_reader(rsock, reader)
1009
1010 # Simulate the reception of data from the network
1011 loop.call_soon(wsock.send, 'abc'.encode())
1012
1013 # Run the event loop
1014 loop.run_forever()
1015
1016 # We are done, close sockets and the event loop
1017 rsock.close()
1018 wsock.close()
1019 loop.close()
1020
1021.. seealso::
1022
1023 The :ref:`register an open socket to wait for data using a protocol
1024 <asyncio-register-socket>` example uses a low-level protocol created by the
Guido van Rossumf68afd82016-08-08 09:41:21 -07001025 :meth:`AbstractEventLoop.create_connection` method.
Victor Stinner04e6df32014-10-11 16:16:27 +02001026
1027 The :ref:`register an open socket to wait for data using streams
1028 <asyncio-register-socket-streams>` example uses high-level streams
1029 created by the :func:`open_connection` function in a coroutine.
1030
1031
1032Set signal handlers for SIGINT and SIGTERM
Victor Stinnera092a612015-01-09 15:58:41 +01001033^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinner04e6df32014-10-11 16:16:27 +02001034
1035Register handlers for signals :py:data:`SIGINT` and :py:data:`SIGTERM` using
Guido van Rossumf68afd82016-08-08 09:41:21 -07001036the :meth:`AbstractEventLoop.add_signal_handler` method::
Victor Stinner8b863482014-01-27 10:07:50 +01001037
1038 import asyncio
1039 import functools
1040 import os
1041 import signal
1042
1043 def ask_exit(signame):
1044 print("got signal %s: exit" % signame)
1045 loop.stop()
1046
1047 loop = asyncio.get_event_loop()
1048 for signame in ('SIGINT', 'SIGTERM'):
1049 loop.add_signal_handler(getattr(signal, signame),
1050 functools.partial(ask_exit, signame))
1051
Serhiy Storchaka0424eaf2015-09-12 17:45:25 +03001052 print("Event loop running forever, press Ctrl+C to interrupt.")
Victor Stinner8b863482014-01-27 10:07:50 +01001053 print("pid %s: send SIGINT or SIGTERM to exit." % os.getpid())
Victor Stinner63b21a82014-07-05 15:38:59 +02001054 try:
1055 loop.run_forever()
1056 finally:
1057 loop.close()
Victor Stinner2cef3002014-10-23 22:38:46 +02001058
1059This example only works on UNIX.