blob: 6cee171b65aaea53a8ff589b33cedcd8a6ae5d34 [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
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500540TLS Upgrade
541-----------
542
543.. coroutinemethod:: AbstractEventLoop.start_tls(transport, protocol, sslcontext, \*, server_side=False, server_hostname=None, ssl_handshake_timeout=None)
544
545 Upgrades an existing connection to TLS.
546
547 Returns a new transport instance, that the *protocol* must start using
548 immediately after the *await*. The *transport* instance passed to
549 the *start_tls* method should never be used again.
550
551 Parameters:
552
553 * *transport* and *protocol* instances that methods like
554 :meth:`~AbstractEventLoop.create_server` and
555 :meth:`~AbstractEventLoop.create_connection` return.
556
557 * *sslcontext*: a configured instance of :class:`~ssl.SSLContext`.
558
559 * *server_side* pass ``True`` when a server-side connection is being
560 upgraded (like the one created by :meth:`~AbstractEventLoop.create_server`).
561
562 * *server_hostname*: sets or overrides the host name that the target
563 server's certificate will be matched against.
564
565 * *ssl_handshake_timeout* is (for an SSL connection) the time in seconds to
566 wait for the SSL handshake to complete before aborting the connection.
567 ``10.0`` seconds if ``None`` (default).
568
569 .. versionadded:: 3.7
570
571
Victor Stinnerc1567df2014-02-08 23:22:58 +0100572Watch file descriptors
573----------------------
574
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200575On Windows with :class:`SelectorEventLoop`, only socket handles are supported
576(ex: pipe file descriptors are not supported).
577
578On Windows with :class:`ProactorEventLoop`, these methods are not supported.
579
Guido van Rossumf68afd82016-08-08 09:41:21 -0700580.. method:: AbstractEventLoop.add_reader(fd, callback, \*args)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100581
582 Start watching the file descriptor for read availability and then call the
583 *callback* with specified arguments.
584
Victor Stinner8464c242014-11-28 13:15:41 +0100585 :ref:`Use functools.partial to pass keywords to the callback
586 <asyncio-pass-keywords>`.
587
Guido van Rossumf68afd82016-08-08 09:41:21 -0700588.. method:: AbstractEventLoop.remove_reader(fd)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100589
590 Stop watching the file descriptor for read availability.
591
Guido van Rossumf68afd82016-08-08 09:41:21 -0700592.. method:: AbstractEventLoop.add_writer(fd, callback, \*args)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100593
594 Start watching the file descriptor for write availability and then call the
595 *callback* with specified arguments.
596
Victor Stinner8464c242014-11-28 13:15:41 +0100597 :ref:`Use functools.partial to pass keywords to the callback
598 <asyncio-pass-keywords>`.
599
Guido van Rossumf68afd82016-08-08 09:41:21 -0700600.. method:: AbstractEventLoop.remove_writer(fd)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100601
602 Stop watching the file descriptor for write availability.
603
Victor Stinner04e6df32014-10-11 16:16:27 +0200604The :ref:`watch a file descriptor for read events <asyncio-watch-read-event>`
Guido van Rossumf68afd82016-08-08 09:41:21 -0700605example uses the low-level :meth:`AbstractEventLoop.add_reader` method to register
Victor Stinner04e6df32014-10-11 16:16:27 +0200606the file descriptor of a socket.
607
Victor Stinnerc1567df2014-02-08 23:22:58 +0100608
609Low-level socket operations
610---------------------------
611
Guido van Rossumf68afd82016-08-08 09:41:21 -0700612.. coroutinemethod:: AbstractEventLoop.sock_recv(sock, nbytes)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100613
Yury Selivanov55c50842016-06-08 12:48:15 -0400614 Receive data from the socket. Modeled after blocking
615 :meth:`socket.socket.recv` method.
616
617 The return value is a bytes object
Victor Stinnerc1567df2014-02-08 23:22:58 +0100618 representing the data received. The maximum amount of data to be received
619 at once is specified by *nbytes*.
620
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 a :class:`Future`.
627 Since Python 3.7, this is an ``async def`` method.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100628
Antoine Pitrou525f40d2017-10-19 21:46:40 +0200629.. coroutinemethod:: AbstractEventLoop.sock_recv_into(sock, buf)
630
631 Receive data from the socket. Modeled after blocking
632 :meth:`socket.socket.recv_into` method.
633
634 The received data is written into *buf* (a writable buffer).
635 The return value is the number of bytes written.
636
637 With :class:`SelectorEventLoop` event loop, the socket *sock* must be
638 non-blocking.
639
Antoine Pitrou525f40d2017-10-19 21:46:40 +0200640 .. versionadded:: 3.7
641
Guido van Rossumf68afd82016-08-08 09:41:21 -0700642.. coroutinemethod:: AbstractEventLoop.sock_sendall(sock, data)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100643
Yury Selivanov55c50842016-06-08 12:48:15 -0400644 Send data to the socket. Modeled after blocking
645 :meth:`socket.socket.sendall` method.
646
647 The socket must be connected to a remote socket.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100648 This method continues to send data from *data* until either all data has
649 been sent or an error occurs. ``None`` is returned on success. On error,
650 an exception is raised, and there is no way to determine how much data, if
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500651 any, was successfully processed by the receiving end of the connection.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100652
Victor Stinnerd84fd732014-08-26 01:01:59 +0200653 With :class:`SelectorEventLoop` event loop, the socket *sock* must be
654 non-blocking.
Victor Stinnerec2ce092014-07-29 23:12:22 +0200655
Yury Selivanov19a44f62017-12-14 20:53:26 -0500656 .. versionchanged:: 3.7
657 Even though the method was always documented as a coroutine
658 method, before Python 3.7 it returned an :class:`Future`.
659 Since Python 3.7, this is an ``async def`` method.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100660
Guido van Rossumf68afd82016-08-08 09:41:21 -0700661.. coroutinemethod:: AbstractEventLoop.sock_connect(sock, address)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100662
Yury Selivanov55c50842016-06-08 12:48:15 -0400663 Connect to a remote socket at *address*. Modeled after
664 blocking :meth:`socket.socket.connect` method.
Victor Stinner1b0580b2014-02-13 09:24:37 +0100665
Victor Stinnerd84fd732014-08-26 01:01:59 +0200666 With :class:`SelectorEventLoop` event loop, the socket *sock* must be
667 non-blocking.
Victor Stinnerec2ce092014-07-29 23:12:22 +0200668
Yury Selivanov55c50842016-06-08 12:48:15 -0400669 .. versionchanged:: 3.5.2
670 ``address`` no longer needs to be resolved. ``sock_connect``
671 will try to check if the *address* is already resolved by calling
672 :func:`socket.inet_pton`. If not,
Guido van Rossumf68afd82016-08-08 09:41:21 -0700673 :meth:`AbstractEventLoop.getaddrinfo` will be used to resolve the
Yury Selivanov55c50842016-06-08 12:48:15 -0400674 *address*.
675
Victor Stinnerc1567df2014-02-08 23:22:58 +0100676 .. seealso::
677
Guido van Rossumf68afd82016-08-08 09:41:21 -0700678 :meth:`AbstractEventLoop.create_connection`
Yury Selivanov55c50842016-06-08 12:48:15 -0400679 and :func:`asyncio.open_connection() <open_connection>`.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100680
681
Guido van Rossumf68afd82016-08-08 09:41:21 -0700682.. coroutinemethod:: AbstractEventLoop.sock_accept(sock)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100683
Yury Selivanov55c50842016-06-08 12:48:15 -0400684 Accept a connection. Modeled after blocking
685 :meth:`socket.socket.accept`.
686
687 The socket must be bound to an address and listening
Victor Stinnerc1567df2014-02-08 23:22:58 +0100688 for connections. The return value is a pair ``(conn, address)`` where *conn*
689 is a *new* socket object usable to send and receive data on the connection,
690 and *address* is the address bound to the socket on the other end of the
691 connection.
692
Victor Stinnerec2ce092014-07-29 23:12:22 +0200693 The socket *sock* must be non-blocking.
694
Yury Selivanov19a44f62017-12-14 20:53:26 -0500695 .. versionchanged:: 3.7
696 Even though the method was always documented as a coroutine
697 method, before Python 3.7 it returned a :class:`Future`.
698 Since Python 3.7, this is an ``async def`` method.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100699
700 .. seealso::
701
Guido van Rossumf68afd82016-08-08 09:41:21 -0700702 :meth:`AbstractEventLoop.create_server` and :func:`start_server`.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100703
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200704.. coroutinemethod:: AbstractEventLoop.sock_sendfile(sock, file, \
705 offset=0, count=None, \
706 *, fallback=True)
707
708 Send a file using high-performance :mod:`os.sendfile` if possible
709 and return the total number of bytes which were sent.
710
711 Asynchronous version of :meth:`socket.socket.sendfile`.
712
713 *sock* must be non-blocking :class:`~socket.socket` of
714 :const:`socket.SOCK_STREAM` type.
715
716 *file* must be a regular file object opened in binary mode.
717
718 *offset* tells from where to start reading the file. If specified,
719 *count* is the total number of bytes to transmit as opposed to
720 sending the file until EOF is reached. File position is updated on
721 return or also in case of error in which case :meth:`file.tell()
722 <io.IOBase.tell>` can be used to figure out the number of bytes
723 which were sent.
724
725 *fallback* set to ``True`` makes asyncio to manually read and send
726 the file when the platform does not support the sendfile syscall
727 (e.g. Windows or SSL socket on Unix).
728
Andrew Svetlov7464e872018-01-19 20:04:29 +0200729 Raise :exc:`SendfileNotAvailableError` if the system does not support
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200730 *sendfile* syscall and *fallback* is ``False``.
731
732 .. versionadded:: 3.7
733
Victor Stinnerc1567df2014-02-08 23:22:58 +0100734
735Resolve host name
736-----------------
Victor Stinnerea3183f2013-12-03 01:08:00 +0100737
Guido van Rossumf68afd82016-08-08 09:41:21 -0700738.. coroutinemethod:: AbstractEventLoop.getaddrinfo(host, port, \*, family=0, type=0, proto=0, flags=0)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100739
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500740 This method is a :ref:`coroutine <coroutine>`, similar to
741 :meth:`socket.getaddrinfo` function but non-blocking.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100742
Guido van Rossumf68afd82016-08-08 09:41:21 -0700743.. coroutinemethod:: AbstractEventLoop.getnameinfo(sockaddr, flags=0)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100744
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500745 This method is a :ref:`coroutine <coroutine>`, similar to
746 :meth:`socket.getnameinfo` function but non-blocking.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100747
748
Victor Stinner984600f2014-03-25 09:40:26 +0100749Connect pipes
750-------------
Victor Stinnerea3183f2013-12-03 01:08:00 +0100751
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200752On Windows with :class:`SelectorEventLoop`, these methods are not supported.
753Use :class:`ProactorEventLoop` to support pipes on Windows.
754
Guido van Rossumf68afd82016-08-08 09:41:21 -0700755.. coroutinemethod:: AbstractEventLoop.connect_read_pipe(protocol_factory, pipe)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100756
Victor Stinnerd84fd732014-08-26 01:01:59 +0200757 Register read pipe in eventloop.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100758
759 *protocol_factory* should instantiate object with :class:`Protocol`
Victor Stinnera5b257a2014-05-29 00:14:03 +0200760 interface. *pipe* is a :term:`file-like object <file object>`.
761 Return pair ``(transport, protocol)``, where *transport* supports the
Victor Stinnerea3183f2013-12-03 01:08:00 +0100762 :class:`ReadTransport` interface.
763
Victor Stinnerd84fd732014-08-26 01:01:59 +0200764 With :class:`SelectorEventLoop` event loop, the *pipe* is set to
765 non-blocking mode.
766
Guido van Rossumf68afd82016-08-08 09:41:21 -0700767.. coroutinemethod:: AbstractEventLoop.connect_write_pipe(protocol_factory, pipe)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100768
769 Register write pipe in eventloop.
770
771 *protocol_factory* should instantiate object with :class:`BaseProtocol`
Victor Stinner2cef3002014-10-23 22:38:46 +0200772 interface. *pipe* is :term:`file-like object <file object>`.
773 Return pair ``(transport, protocol)``, where *transport* supports
Victor Stinnerea3183f2013-12-03 01:08:00 +0100774 :class:`WriteTransport` interface.
775
Victor Stinnerd84fd732014-08-26 01:01:59 +0200776 With :class:`SelectorEventLoop` event loop, the *pipe* is set to
777 non-blocking mode.
778
Victor Stinner08444382014-02-02 22:43:39 +0100779.. seealso::
780
Guido van Rossumf68afd82016-08-08 09:41:21 -0700781 The :meth:`AbstractEventLoop.subprocess_exec` and
782 :meth:`AbstractEventLoop.subprocess_shell` methods.
Victor Stinner08444382014-02-02 22:43:39 +0100783
Victor Stinnerea3183f2013-12-03 01:08:00 +0100784
Victor Stinner8b863482014-01-27 10:07:50 +0100785UNIX signals
786------------
787
788Availability: UNIX only.
789
Guido van Rossumf68afd82016-08-08 09:41:21 -0700790.. method:: AbstractEventLoop.add_signal_handler(signum, callback, \*args)
Victor Stinner8b863482014-01-27 10:07:50 +0100791
792 Add a handler for a signal.
793
794 Raise :exc:`ValueError` if the signal number is invalid or uncatchable.
795 Raise :exc:`RuntimeError` if there is a problem setting up the handler.
796
Victor Stinner8464c242014-11-28 13:15:41 +0100797 :ref:`Use functools.partial to pass keywords to the callback
798 <asyncio-pass-keywords>`.
799
Guido van Rossumf68afd82016-08-08 09:41:21 -0700800.. method:: AbstractEventLoop.remove_signal_handler(sig)
Victor Stinner8b863482014-01-27 10:07:50 +0100801
802 Remove a handler for a signal.
803
804 Return ``True`` if a signal handler was removed, ``False`` if not.
805
806.. seealso::
807
808 The :mod:`signal` module.
809
810
Victor Stinnerea3183f2013-12-03 01:08:00 +0100811Executor
812--------
813
814Call a function in an :class:`~concurrent.futures.Executor` (pool of threads or
815pool of processes). By default, an event loop uses a thread pool executor
816(:class:`~concurrent.futures.ThreadPoolExecutor`).
817
Guido van Rossumf68afd82016-08-08 09:41:21 -0700818.. coroutinemethod:: AbstractEventLoop.run_in_executor(executor, func, \*args)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100819
Andrew Svetlov1c62b522015-10-01 09:48:08 +0300820 Arrange for a *func* to be called in the specified executor.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100821
Larry Hastings3732ed22014-03-15 21:13:56 -0700822 The *executor* argument should be an :class:`~concurrent.futures.Executor`
823 instance. The default executor is used if *executor* is ``None``.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100824
Andrew Svetlov1c62b522015-10-01 09:48:08 +0300825 :ref:`Use functools.partial to pass keywords to the *func*
Victor Stinner8464c242014-11-28 13:15:41 +0100826 <asyncio-pass-keywords>`.
827
Yury Selivanove8a60452016-10-21 17:40:42 -0400828 .. versionchanged:: 3.5.3
829 :meth:`BaseEventLoop.run_in_executor` no longer configures the
830 ``max_workers`` of the thread pool executor it creates, instead
831 leaving it up to the thread pool executor
832 (:class:`~concurrent.futures.ThreadPoolExecutor`) to set the
833 default.
834
Yury Selivanov19a44f62017-12-14 20:53:26 -0500835 .. versionchanged:: 3.7
836 Even though the method was always documented as a coroutine
837 method, before Python 3.7 it returned a :class:`Future`.
838 Since Python 3.7, this is an ``async def`` method.
839
Guido van Rossumf68afd82016-08-08 09:41:21 -0700840.. method:: AbstractEventLoop.set_default_executor(executor)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100841
842 Set the default executor used by :meth:`run_in_executor`.
843
844
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500845Error Handling API
846------------------
847
Martin Panterc04fb562016-02-10 05:44:01 +0000848Allows customizing how exceptions are handled in the event loop.
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500849
Guido van Rossumf68afd82016-08-08 09:41:21 -0700850.. method:: AbstractEventLoop.set_exception_handler(handler)
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500851
852 Set *handler* as the new event loop exception handler.
853
854 If *handler* is ``None``, the default exception handler will
855 be set.
856
857 If *handler* is a callable object, it should have a
858 matching signature to ``(loop, context)``, where ``loop``
859 will be a reference to the active event loop, ``context``
860 will be a ``dict`` object (see :meth:`call_exception_handler`
861 documentation for details about context).
862
Guido van Rossumf68afd82016-08-08 09:41:21 -0700863.. method:: AbstractEventLoop.get_exception_handler()
Yury Selivanov950204d2016-05-16 16:23:00 -0400864
865 Return the exception handler, or ``None`` if the default one
866 is in use.
867
868 .. versionadded:: 3.5.2
869
Guido van Rossumf68afd82016-08-08 09:41:21 -0700870.. method:: AbstractEventLoop.default_exception_handler(context)
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500871
872 Default exception handler.
873
874 This is called when an exception occurs and no exception
875 handler is set, and can be called by a custom exception
876 handler that wants to defer to the default behavior.
877
878 *context* parameter has the same meaning as in
879 :meth:`call_exception_handler`.
880
Guido van Rossumf68afd82016-08-08 09:41:21 -0700881.. method:: AbstractEventLoop.call_exception_handler(context)
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500882
883 Call the current event loop exception handler.
884
885 *context* is a ``dict`` object containing the following keys
886 (new keys may be introduced later):
887
888 * 'message': Error message;
889 * 'exception' (optional): Exception object;
890 * 'future' (optional): :class:`asyncio.Future` instance;
891 * 'handle' (optional): :class:`asyncio.Handle` instance;
892 * 'protocol' (optional): :ref:`Protocol <asyncio-protocol>` instance;
893 * 'transport' (optional): :ref:`Transport <asyncio-transport>` instance;
894 * 'socket' (optional): :class:`socket.socket` instance.
895
896 .. note::
897
898 Note: this method should not be overloaded in subclassed
899 event loops. For any custom exception handling, use
900 :meth:`set_exception_handler()` method.
901
Victor Stinner0f3e6bc2014-02-19 23:15:02 +0100902Debug mode
903----------
904
Guido van Rossumf68afd82016-08-08 09:41:21 -0700905.. method:: AbstractEventLoop.get_debug()
Victor Stinner0f3e6bc2014-02-19 23:15:02 +0100906
Victor Stinner7b7120e2014-06-23 00:12:14 +0200907 Get the debug mode (:class:`bool`) of the event loop.
908
909 The default value is ``True`` if the environment variable
910 :envvar:`PYTHONASYNCIODEBUG` is set to a non-empty string, ``False``
911 otherwise.
Victor Stinner0f3e6bc2014-02-19 23:15:02 +0100912
Victor Stinner64d750b2014-06-18 03:25:23 +0200913 .. versionadded:: 3.4.2
914
Guido van Rossumf68afd82016-08-08 09:41:21 -0700915.. method:: AbstractEventLoop.set_debug(enabled: bool)
Victor Stinner0f3e6bc2014-02-19 23:15:02 +0100916
917 Set the debug mode of the event loop.
918
Victor Stinner64d750b2014-06-18 03:25:23 +0200919 .. versionadded:: 3.4.2
920
Victor Stinner0f3e6bc2014-02-19 23:15:02 +0100921.. seealso::
922
Victor Stinner62511fd2014-06-23 00:36:11 +0200923 The :ref:`debug mode of asyncio <asyncio-debug-mode>`.
Victor Stinner0f3e6bc2014-02-19 23:15:02 +0100924
Victor Stinner8c462c52014-01-24 18:11:43 +0100925Server
926------
927
Victor Stinner8ebeb032014-07-11 23:47:40 +0200928.. class:: Server
Victor Stinner8c462c52014-01-24 18:11:43 +0100929
Victor Stinner8ebeb032014-07-11 23:47:40 +0200930 Server listening on sockets.
931
Guido van Rossumf68afd82016-08-08 09:41:21 -0700932 Object created by the :meth:`AbstractEventLoop.create_server` method and the
R David Murray756f0b12015-01-29 19:53:33 -0500933 :func:`start_server` function. Don't instantiate the class directly.
Victor Stinner8c462c52014-01-24 18:11:43 +0100934
935 .. method:: close()
936
Victor Stinner4bfb14a2014-07-12 03:20:24 +0200937 Stop serving: close listening sockets and set the :attr:`sockets`
938 attribute to ``None``.
939
Berker Peksag49c9edf2016-01-20 07:14:22 +0200940 The sockets that represent existing incoming client connections are left
941 open.
Victor Stinner8ebeb032014-07-11 23:47:40 +0200942
Berker Peksag49c9edf2016-01-20 07:14:22 +0200943 The server is closed asynchronously, use the :meth:`wait_closed`
944 coroutine to wait until the server is closed.
Victor Stinner8c462c52014-01-24 18:11:43 +0100945
Srinivas Reddy Thatiparthy (శ్రీనివాస్ రెడ్డి తాటిపర్తి)1634fc22017-12-30 20:39:32 +0530946 .. method:: get_loop()
947
948 Gives the event loop associated with the server object.
949
950 .. versionadded:: 3.7
951
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100952 .. coroutinemethod:: wait_closed()
Victor Stinner8c462c52014-01-24 18:11:43 +0100953
Victor Stinner8ebeb032014-07-11 23:47:40 +0200954 Wait until the :meth:`close` method completes.
955
Victor Stinner8ebeb032014-07-11 23:47:40 +0200956 .. attribute:: sockets
957
958 List of :class:`socket.socket` objects the server is listening to, or
959 ``None`` if the server is closed.
Victor Stinner8c462c52014-01-24 18:11:43 +0100960
961
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500962Handle
963------
964
965.. class:: Handle
966
Guido van Rossumf68afd82016-08-08 09:41:21 -0700967 A callback wrapper object returned by :func:`AbstractEventLoop.call_soon`,
968 :func:`AbstractEventLoop.call_soon_threadsafe`, :func:`AbstractEventLoop.call_later`,
969 and :func:`AbstractEventLoop.call_at`.
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500970
971 .. method:: cancel()
972
Yury Selivanov1096f762015-06-25 13:49:52 -0400973 Cancel the call. If the callback is already canceled or executed,
974 this method has no effect.
Victor Stinneraea82292014-07-08 23:42:38 +0200975
Marat Sharafutdinov69cfed12017-11-07 12:06:05 +0300976 .. method:: cancelled()
977
978 Return ``True`` if the call was cancelled.
979
980 .. versionadded:: 3.7
981
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500982
Andrew Svetlov7464e872018-01-19 20:04:29 +0200983SendfileNotAvailableError
984-------------------------
985
986
987.. exception:: SendfileNotAvailableError
988
989 Sendfile syscall is not available, subclass of :exc:`RuntimeError`.
990
991 Raised if the OS does not support senfile syscall for
992 given socket or file type.
993
994
Victor Stinner6888b962014-10-11 16:15:58 +0200995Event loop examples
Victor Stinnera092a612015-01-09 15:58:41 +0100996-------------------
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500997
Victor Stinner3e09e322013-12-03 01:22:06 +0100998.. _asyncio-hello-world-callback:
Victor Stinnerea3183f2013-12-03 01:08:00 +0100999
Victor Stinner7f314ed2014-10-15 18:49:16 +02001000Hello World with call_soon()
Victor Stinnera092a612015-01-09 15:58:41 +01001001^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +01001002
Guido van Rossumf68afd82016-08-08 09:41:21 -07001003Example using the :meth:`AbstractEventLoop.call_soon` method to schedule a
Victor Stinner7f314ed2014-10-15 18:49:16 +02001004callback. The callback displays ``"Hello World"`` and then stops the event
1005loop::
Victor Stinnerea3183f2013-12-03 01:08:00 +01001006
1007 import asyncio
1008
Victor Stinner7f314ed2014-10-15 18:49:16 +02001009 def hello_world(loop):
Victor Stinnerea3183f2013-12-03 01:08:00 +01001010 print('Hello World')
Victor Stinner7f314ed2014-10-15 18:49:16 +02001011 loop.stop()
Victor Stinnerea3183f2013-12-03 01:08:00 +01001012
1013 loop = asyncio.get_event_loop()
Victor Stinner7f314ed2014-10-15 18:49:16 +02001014
1015 # Schedule a call to hello_world()
1016 loop.call_soon(hello_world, loop)
1017
1018 # Blocking call interrupted by loop.stop()
1019 loop.run_forever()
1020 loop.close()
Victor Stinnerea3183f2013-12-03 01:08:00 +01001021
Victor Stinner3e09e322013-12-03 01:22:06 +01001022.. seealso::
Victor Stinnerea3183f2013-12-03 01:08:00 +01001023
Victor Stinner6888b962014-10-11 16:15:58 +02001024 The :ref:`Hello World coroutine <asyncio-hello-world-coroutine>` example
1025 uses a :ref:`coroutine <coroutine>`.
Victor Stinnerea3183f2013-12-03 01:08:00 +01001026
Victor Stinner8b863482014-01-27 10:07:50 +01001027
Victor Stinner7f314ed2014-10-15 18:49:16 +02001028.. _asyncio-date-callback:
1029
1030Display the current date with call_later()
Victor Stinnera092a612015-01-09 15:58:41 +01001031^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinner7f314ed2014-10-15 18:49:16 +02001032
1033Example of callback displaying the current date every second. The callback uses
Guido van Rossumf68afd82016-08-08 09:41:21 -07001034the :meth:`AbstractEventLoop.call_later` method to reschedule itself during 5
Victor Stinner7f314ed2014-10-15 18:49:16 +02001035seconds, and then stops the event loop::
1036
1037 import asyncio
1038 import datetime
1039
1040 def display_date(end_time, loop):
1041 print(datetime.datetime.now())
1042 if (loop.time() + 1.0) < end_time:
1043 loop.call_later(1, display_date, end_time, loop)
1044 else:
1045 loop.stop()
1046
1047 loop = asyncio.get_event_loop()
1048
1049 # Schedule the first call to display_date()
1050 end_time = loop.time() + 5.0
1051 loop.call_soon(display_date, end_time, loop)
1052
1053 # Blocking call interrupted by loop.stop()
1054 loop.run_forever()
1055 loop.close()
1056
1057.. seealso::
1058
1059 The :ref:`coroutine displaying the current date
1060 <asyncio-date-coroutine>` example uses a :ref:`coroutine
1061 <coroutine>`.
1062
1063
Victor Stinner04e6df32014-10-11 16:16:27 +02001064.. _asyncio-watch-read-event:
Victor Stinner8b863482014-01-27 10:07:50 +01001065
Victor Stinner04e6df32014-10-11 16:16:27 +02001066Watch a file descriptor for read events
Victor Stinnera092a612015-01-09 15:58:41 +01001067^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinner04e6df32014-10-11 16:16:27 +02001068
1069Wait until a file descriptor received some data using the
Guido van Rossumf68afd82016-08-08 09:41:21 -07001070:meth:`AbstractEventLoop.add_reader` method and then close the event loop::
Victor Stinner04e6df32014-10-11 16:16:27 +02001071
1072 import asyncio
Victor Stinnerac577d72017-11-28 21:33:20 +01001073 from socket import socketpair
Victor Stinner04e6df32014-10-11 16:16:27 +02001074
1075 # Create a pair of connected file descriptors
Victor Stinnerccd8e342014-10-11 16:30:02 +02001076 rsock, wsock = socketpair()
Victor Stinner04e6df32014-10-11 16:16:27 +02001077 loop = asyncio.get_event_loop()
1078
1079 def reader():
1080 data = rsock.recv(100)
1081 print("Received:", data.decode())
Victor Stinner2cef3002014-10-23 22:38:46 +02001082 # We are done: unregister the file descriptor
Victor Stinner04e6df32014-10-11 16:16:27 +02001083 loop.remove_reader(rsock)
1084 # Stop the event loop
1085 loop.stop()
1086
Victor Stinner2cef3002014-10-23 22:38:46 +02001087 # Register the file descriptor for read event
Victor Stinner04e6df32014-10-11 16:16:27 +02001088 loop.add_reader(rsock, reader)
1089
1090 # Simulate the reception of data from the network
1091 loop.call_soon(wsock.send, 'abc'.encode())
1092
1093 # Run the event loop
1094 loop.run_forever()
1095
1096 # We are done, close sockets and the event loop
1097 rsock.close()
1098 wsock.close()
1099 loop.close()
1100
1101.. seealso::
1102
1103 The :ref:`register an open socket to wait for data using a protocol
1104 <asyncio-register-socket>` example uses a low-level protocol created by the
Guido van Rossumf68afd82016-08-08 09:41:21 -07001105 :meth:`AbstractEventLoop.create_connection` method.
Victor Stinner04e6df32014-10-11 16:16:27 +02001106
1107 The :ref:`register an open socket to wait for data using streams
1108 <asyncio-register-socket-streams>` example uses high-level streams
1109 created by the :func:`open_connection` function in a coroutine.
1110
1111
1112Set signal handlers for SIGINT and SIGTERM
Victor Stinnera092a612015-01-09 15:58:41 +01001113^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinner04e6df32014-10-11 16:16:27 +02001114
1115Register handlers for signals :py:data:`SIGINT` and :py:data:`SIGTERM` using
Guido van Rossumf68afd82016-08-08 09:41:21 -07001116the :meth:`AbstractEventLoop.add_signal_handler` method::
Victor Stinner8b863482014-01-27 10:07:50 +01001117
1118 import asyncio
1119 import functools
1120 import os
1121 import signal
1122
1123 def ask_exit(signame):
1124 print("got signal %s: exit" % signame)
1125 loop.stop()
1126
1127 loop = asyncio.get_event_loop()
1128 for signame in ('SIGINT', 'SIGTERM'):
1129 loop.add_signal_handler(getattr(signal, signame),
1130 functools.partial(ask_exit, signame))
1131
Serhiy Storchaka0424eaf2015-09-12 17:45:25 +03001132 print("Event loop running forever, press Ctrl+C to interrupt.")
Victor Stinner8b863482014-01-27 10:07:50 +01001133 print("pid %s: send SIGINT or SIGTERM to exit." % os.getpid())
Victor Stinner63b21a82014-07-05 15:38:59 +02001134 try:
1135 loop.run_forever()
1136 finally:
1137 loop.close()
Victor Stinner2cef3002014-10-23 22:38:46 +02001138
1139This example only works on UNIX.