blob: 7fed2c23df7d5da8335407a0eedbef59ab96e66a [file] [log] [blame]
R David Murray6a143812013-12-20 14:37:39 -05001.. currentmodule:: asyncio
Victor Stinnerea3183f2013-12-03 01:08:00 +01002
Yury Selivanov7c7605f2018-09-11 09:54:40 -07003
4==========
5Event Loop
6==========
7
Miss Islington (bot)6bfeb812019-10-10 16:25:28 -07008**Source code:** :source:`Lib/asyncio/events.py`,
9:source:`Lib/asyncio/base_events.py`
10
11------------------------------------
Yury Selivanov7c7605f2018-09-11 09:54:40 -070012
13.. rubric:: Preface
14
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -040015The event loop is the core of every asyncio application.
Yury Selivanov7c7605f2018-09-11 09:54:40 -070016Event loops run asynchronous tasks and callbacks, perform network
Carol Willing5b7cbd62018-09-12 17:05:17 -070017IO operations, and run subprocesses.
Yury Selivanov7c7605f2018-09-11 09:54:40 -070018
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -040019Application developers should typically use the high-level asyncio functions,
20such as :func:`asyncio.run`, and should rarely need to reference the loop
21object or call its methods. This section is intended mostly for authors
22of lower-level code, libraries, and frameworks, who need finer control over
23the event loop behavior.
Yury Selivanov7c7605f2018-09-11 09:54:40 -070024
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -040025.. rubric:: Obtaining the Event Loop
Yury Selivanov7c7605f2018-09-11 09:54:40 -070026
27The following low-level functions can be used to get, set, or create
28an event loop:
29
30.. function:: get_running_loop()
31
32 Return the running event loop in the current OS thread.
33
34 If there is no running event loop a :exc:`RuntimeError` is raised.
35 This function can only be called from a coroutine or a callback.
36
37 .. versionadded:: 3.7
38
39.. function:: get_event_loop()
40
41 Get the current event loop. If there is no current event loop set
42 in the current OS thread and :func:`set_event_loop` has not yet
43 been called, asyncio will create a new event loop and set it as the
44 current one.
45
Carol Willing5b7cbd62018-09-12 17:05:17 -070046 Because this function has rather complex behavior (especially
47 when custom event loop policies are in use), using the
48 :func:`get_running_loop` function is preferred to :func:`get_event_loop`
49 in coroutines and callbacks.
Yury Selivanov7c7605f2018-09-11 09:54:40 -070050
Carol Willing5b7cbd62018-09-12 17:05:17 -070051 Consider also using the :func:`asyncio.run` function instead of using
52 lower level functions to manually create and close an event loop.
Yury Selivanov7c7605f2018-09-11 09:54:40 -070053
54.. function:: set_event_loop(loop)
55
56 Set *loop* as a current event loop for the current OS thread.
57
58.. function:: new_event_loop()
59
60 Create a new event loop object.
61
62Note that the behaviour of :func:`get_event_loop`, :func:`set_event_loop`,
63and :func:`new_event_loop` functions can be altered by
64:ref:`setting a custom event loop policy <asyncio-policies>`.
65
66
67.. rubric:: Contents
68
69This documentation page contains the following sections:
70
Carol Willing5b7cbd62018-09-12 17:05:17 -070071* The `Event Loop Methods`_ section is the reference documentation of
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -040072 the event loop APIs;
Yury Selivanov7c7605f2018-09-11 09:54:40 -070073
74* The `Callback Handles`_ section documents the :class:`Handle` and
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -040075 :class:`TimerHandle` instances which are returned from scheduling
76 methods such as :meth:`loop.call_soon` and :meth:`loop.call_later`;
Yury Selivanov7c7605f2018-09-11 09:54:40 -070077
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -040078* The `Server Objects`_ section documents types returned from
Yury Selivanov7c7605f2018-09-11 09:54:40 -070079 event loop methods like :meth:`loop.create_server`;
80
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -040081* The `Event Loop Implementations`_ section documents the
Yury Selivanov7c7605f2018-09-11 09:54:40 -070082 :class:`SelectorEventLoop` and :class:`ProactorEventLoop` classes;
83
84* The `Examples`_ section showcases how to work with some event
85 loop APIs.
86
87
Victor Stinner9592edb2014-02-02 15:03:02 +010088.. _asyncio-event-loop:
Victor Stinnerea3183f2013-12-03 01:08:00 +010089
Yury Selivanov7c7605f2018-09-11 09:54:40 -070090Event Loop Methods
91==================
Victor Stinnerea3183f2013-12-03 01:08:00 +010092
Carol Willing5b7cbd62018-09-12 17:05:17 -070093Event loops have **low-level** APIs for the following:
lf627d2c82017-07-25 17:03:51 -060094
Yury Selivanov7c7605f2018-09-11 09:54:40 -070095.. contents::
96 :depth: 1
97 :local:
Victor Stinnerea3183f2013-12-03 01:08:00 +010098
Victor Stinnerea3183f2013-12-03 01:08:00 +010099
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700100Running and stopping the loop
101^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +0100102
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700103.. method:: loop.run_until_complete(future)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100104
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400105 Run until the *future* (an instance of :class:`Future`) has
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700106 completed.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100107
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700108 If the argument is a :ref:`coroutine object <coroutine>` it
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400109 is implicitly scheduled to run as a :class:`asyncio.Task`.
Eli Bendersky136fea22014-02-09 06:55:58 -0800110
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700111 Return the Future's result or raise its exception.
Guido van Rossumf68afd82016-08-08 09:41:21 -0700112
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700113.. method:: loop.run_forever()
Guido van Rossumf68afd82016-08-08 09:41:21 -0700114
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700115 Run the event loop until :meth:`stop` is called.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100116
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700117 If :meth:`stop` is called before :meth:`run_forever()` is called,
118 the loop will poll the I/O selector once with a timeout of zero,
119 run all callbacks scheduled in response to I/O events (and
120 those that were already scheduled), and then exit.
Victor Stinner83704962015-02-25 14:24:15 +0100121
Guido van Rossum41f69f42015-11-19 13:28:47 -0800122 If :meth:`stop` is called while :meth:`run_forever` is running,
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700123 the loop will run the current batch of callbacks and then exit.
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400124 Note that new callbacks scheduled by callbacks will not run in this
Carol Willing5b7cbd62018-09-12 17:05:17 -0700125 case; instead, they will run the next time :meth:`run_forever` or
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700126 :meth:`run_until_complete` is called.
Guido van Rossum41f69f42015-11-19 13:28:47 -0800127
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700128.. method:: loop.stop()
Victor Stinnerea3183f2013-12-03 01:08:00 +0100129
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700130 Stop the event loop.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100131
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700132.. method:: loop.is_running()
Victor Stinnerea3183f2013-12-03 01:08:00 +0100133
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700134 Return ``True`` if the event loop is currently running.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100135
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700136.. method:: loop.is_closed()
Victor Stinnerea3183f2013-12-03 01:08:00 +0100137
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700138 Return ``True`` if the event loop was closed.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100139
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700140.. method:: loop.close()
Victor Stinnerea3183f2013-12-03 01:08:00 +0100141
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700142 Close the event loop.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100143
Andriy Maletskyb83d9172018-10-29 23:39:21 +0200144 The loop must not be running when this function is called.
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700145 Any pending callbacks will be discarded.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100146
Łukasz Langa7f9a2ae2019-06-04 13:03:20 +0200147 This method clears all queues and shuts down the executor, but does
148 not wait for the executor to finish.
Guido van Rossum41f69f42015-11-19 13:28:47 -0800149
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700150 This method is idempotent and irreversible. No other methods
151 should be called after the event loop is closed.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100152
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700153.. coroutinemethod:: loop.shutdown_asyncgens()
Yury Selivanov03660042016-12-15 17:36:05 -0500154
155 Schedule all currently open :term:`asynchronous generator` objects to
156 close with an :meth:`~agen.aclose()` call. After calling this method,
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700157 the event loop will issue a warning if a new asynchronous generator
Carol Willing5b7cbd62018-09-12 17:05:17 -0700158 is iterated. This should be used to reliably finalize all scheduled
Yury Selivanovac94e382018-09-17 23:58:00 -0400159 asynchronous generators.
Carol Willing5b7cbd62018-09-12 17:05:17 -0700160
Yury Selivanovac94e382018-09-17 23:58:00 -0400161 Note that there is no need to call this function when
162 :func:`asyncio.run` is used.
163
164 Example::
Yury Selivanov03660042016-12-15 17:36:05 -0500165
166 try:
167 loop.run_forever()
168 finally:
169 loop.run_until_complete(loop.shutdown_asyncgens())
170 loop.close()
171
172 .. versionadded:: 3.6
173
174
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700175Scheduling callbacks
176^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +0100177
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700178.. method:: loop.call_soon(callback, *args, context=None)
Victor Stinner8464c242014-11-28 13:15:41 +0100179
Carol Willing5b7cbd62018-09-12 17:05:17 -0700180 Schedule a *callback* to be called with *args* arguments at
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700181 the next iteration of the event loop.
Victor Stinner8464c242014-11-28 13:15:41 +0100182
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700183 Callbacks are called in the order in which they are registered.
184 Each callback will be called exactly once.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100185
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700186 An optional keyword-only *context* argument allows specifying a
187 custom :class:`contextvars.Context` for the *callback* to run in.
188 The current context is used when no *context* is provided.
Yury Selivanov28b91782018-05-23 13:35:04 -0400189
Yury Selivanov1096f762015-06-25 13:49:52 -0400190 An instance of :class:`asyncio.Handle` is returned, which can be
Carol Willing5b7cbd62018-09-12 17:05:17 -0700191 used later to cancel the callback.
192
193 This method is not thread-safe.
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500194
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700195.. method:: loop.call_soon_threadsafe(callback, *args, context=None)
Victor Stinner8464c242014-11-28 13:15:41 +0100196
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700197 A thread-safe variant of :meth:`call_soon`. Must be used to
198 schedule callbacks *from another thread*.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100199
Victor Stinner83704962015-02-25 14:24:15 +0100200 See the :ref:`concurrency and multithreading <asyncio-multithreading>`
201 section of the documentation.
202
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700203.. versionchanged:: 3.7
204 The *context* keyword-only parameter was added. See :pep:`567`
205 for more details.
206
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400207.. _asyncio-pass-keywords:
208
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700209.. note::
210
Carol Willing5b7cbd62018-09-12 17:05:17 -0700211 Most :mod:`asyncio` scheduling functions don't allow passing
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400212 keyword arguments. To do that, use :func:`functools.partial`::
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700213
Carol Willing5b7cbd62018-09-12 17:05:17 -0700214 # will schedule "print("Hello", flush=True)"
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700215 loop.call_soon(
216 functools.partial(print, "Hello", flush=True))
217
218 Using partial objects is usually more convenient than using lambdas,
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400219 as asyncio can render partial objects better in debug and error
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700220 messages.
Yury Selivanov28b91782018-05-23 13:35:04 -0400221
Victor Stinnerea3183f2013-12-03 01:08:00 +0100222
Victor Stinner45b27ed2014-02-01 02:36:43 +0100223.. _asyncio-delayed-calls:
224
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700225Scheduling delayed callbacks
226^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +0100227
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700228Event loop provides mechanisms to schedule callback functions
229to be called at some point in the future. Event loop uses monotonic
230clocks to track time.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100231
Victor Stinner45b27ed2014-02-01 02:36:43 +0100232
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700233.. method:: loop.call_later(delay, callback, *args, context=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100234
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700235 Schedule *callback* to be called after the given *delay*
236 number of seconds (can be either an int or a float).
Victor Stinnerea3183f2013-12-03 01:08:00 +0100237
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700238 An instance of :class:`asyncio.TimerHandle` is returned which can
239 be used to cancel the callback.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100240
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700241 *callback* will be called exactly once. If two callbacks are
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400242 scheduled for exactly the same time, the order in which they
243 are called is undefined.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100244
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700245 The optional positional *args* will be passed to the callback when
246 it is called. If you want the callback to be called with keyword
247 arguments use :func:`functools.partial`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100248
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700249 An optional keyword-only *context* argument allows specifying a
250 custom :class:`contextvars.Context` for the *callback* to run in.
251 The current context is used when no *context* is provided.
Victor Stinner8464c242014-11-28 13:15:41 +0100252
Yury Selivanov28b91782018-05-23 13:35:04 -0400253 .. versionchanged:: 3.7
254 The *context* keyword-only parameter was added. See :pep:`567`
255 for more details.
256
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400257 .. versionchanged:: 3.8
258 In Python 3.7 and earlier with the default event loop implementation,
259 the *delay* could not exceed one day.
260 This has been fixed in Python 3.8.
261
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700262.. method:: loop.call_at(when, callback, *args, context=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100263
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700264 Schedule *callback* to be called at the given absolute timestamp
265 *when* (an int or a float), using the same time reference as
266 :meth:`loop.time`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100267
268 This method's behavior is the same as :meth:`call_later`.
269
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700270 An instance of :class:`asyncio.TimerHandle` is returned which can
271 be used to cancel the callback.
Victor Stinner8464c242014-11-28 13:15:41 +0100272
Yury Selivanov28b91782018-05-23 13:35:04 -0400273 .. versionchanged:: 3.7
274 The *context* keyword-only parameter was added. See :pep:`567`
275 for more details.
276
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400277 .. versionchanged:: 3.8
278 In Python 3.7 and earlier with the default event loop implementation,
279 the difference between *when* and the current time could not exceed
280 one day. This has been fixed in Python 3.8.
281
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700282.. method:: loop.time()
Victor Stinnerea3183f2013-12-03 01:08:00 +0100283
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700284 Return the current time, as a :class:`float` value, according to
285 the event loop's internal monotonic clock.
286
287.. note::
Enrico Alarico Carbognani7e954e72019-04-18 14:43:14 +0200288 .. versionchanged:: 3.8
289 In Python 3.7 and earlier timeouts (relative *delay* or absolute *when*)
290 should not exceed one day. This has been fixed in Python 3.8.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100291
Victor Stinner3e09e322013-12-03 01:22:06 +0100292.. seealso::
293
294 The :func:`asyncio.sleep` function.
295
Victor Stinnerea3183f2013-12-03 01:08:00 +0100296
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700297Creating Futures and Tasks
298^^^^^^^^^^^^^^^^^^^^^^^^^^
Yury Selivanov950204d2016-05-16 16:23:00 -0400299
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700300.. method:: loop.create_future()
Yury Selivanov950204d2016-05-16 16:23:00 -0400301
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700302 Create an :class:`asyncio.Future` object attached to the event loop.
Yury Selivanov950204d2016-05-16 16:23:00 -0400303
Carol Willing5b7cbd62018-09-12 17:05:17 -0700304 This is the preferred way to create Futures in asyncio. This lets
305 third-party event loops provide alternative implementations of
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700306 the Future object (with better performance or instrumentation).
Yury Selivanov950204d2016-05-16 16:23:00 -0400307
308 .. versionadded:: 3.5.2
309
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700310.. method:: loop.create_task(coro, \*, name=None)
Yury Selivanov950204d2016-05-16 16:23:00 -0400311
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700312 Schedule the execution of a :ref:`coroutine`.
313 Return a :class:`Task` object.
Victor Stinner530ef2f2014-07-08 12:39:10 +0200314
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700315 Third-party event loops can use their own subclass of :class:`Task`
316 for interoperability. In this case, the result type is a subclass
317 of :class:`Task`.
Victor Stinner530ef2f2014-07-08 12:39:10 +0200318
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700319 If the *name* argument is provided and not ``None``, it is set as
320 the name of the task using :meth:`Task.set_name`.
Victor Stinner530ef2f2014-07-08 12:39:10 +0200321
Alex Grönholmcca4eec2018-08-09 00:06:47 +0300322 .. versionchanged:: 3.8
323 Added the ``name`` parameter.
324
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700325.. method:: loop.set_task_factory(factory)
Yury Selivanov71854612015-05-11 16:28:27 -0400326
327 Set a task factory that will be used by
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700328 :meth:`loop.create_task`.
Yury Selivanov71854612015-05-11 16:28:27 -0400329
330 If *factory* is ``None`` the default task factory will be set.
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400331 Otherwise, *factory* must be a *callable* with the signature matching
332 ``(loop, coro)``, where *loop* is a reference to the active
333 event loop, and *coro* is a coroutine object. The callable
334 must return a :class:`asyncio.Future`-compatible object.
Yury Selivanov71854612015-05-11 16:28:27 -0400335
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700336.. method:: loop.get_task_factory()
Yury Selivanov71854612015-05-11 16:28:27 -0400337
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700338 Return a task factory or ``None`` if the default one is in use.
Yury Selivanov71854612015-05-11 16:28:27 -0400339
Victor Stinner530ef2f2014-07-08 12:39:10 +0200340
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700341Opening network connections
342^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +0100343
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700344.. coroutinemethod:: loop.create_connection(protocol_factory, \
345 host=None, port=None, \*, ssl=None, \
346 family=0, proto=0, flags=0, sock=None, \
347 local_addr=None, server_hostname=None, \
348 ssl_handshake_timeout=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100349
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700350 Open a streaming transport connection to a given
351 address specified by *host* and *port*.
352
353 The socket family can be either :py:data:`~socket.AF_INET` or
354 :py:data:`~socket.AF_INET6` depending on *host* (or the *family*
355 argument, if provided).
356
357 The socket type will be :py:data:`~socket.SOCK_STREAM`.
358
359 *protocol_factory* must be a callable returning an
360 :ref:`asyncio protocol <asyncio-protocol>` implementation.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100361
Yury Selivanov19a44f62017-12-14 20:53:26 -0500362 This method will try to establish the connection in the background.
363 When successful, it returns a ``(transport, protocol)`` pair.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100364
365 The chronological synopsis of the underlying operation is as follows:
366
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700367 #. The connection is established and a :ref:`transport <asyncio-transport>`
368 is created for it.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100369
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700370 #. *protocol_factory* is called without arguments and is expected to
371 return a :ref:`protocol <asyncio-protocol>` instance.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100372
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700373 #. The protocol instance is coupled with the transport by calling its
374 :meth:`~BaseProtocol.connection_made` method.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100375
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700376 #. A ``(transport, protocol)`` tuple is returned on success.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100377
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700378 The created transport is an implementation-dependent bidirectional
379 stream.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100380
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700381 Other arguments:
Victor Stinnerea3183f2013-12-03 01:08:00 +0100382
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400383 * *ssl*: if given and not false, a SSL/TLS transport is created
Victor Stinnerea3183f2013-12-03 01:08:00 +0100384 (by default a plain TCP transport is created). If *ssl* is
385 a :class:`ssl.SSLContext` object, this context is used to create
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400386 the transport; if *ssl* is :const:`True`, a default context returned
387 from :func:`ssl.create_default_context` is used.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100388
Berker Peksag9c1dba22014-09-28 00:00:58 +0300389 .. seealso:: :ref:`SSL/TLS security considerations <ssl-security>`
Antoine Pitrouc5e075f2014-03-22 18:19:11 +0100390
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400391 * *server_hostname* sets or overrides the hostname that the target
392 server's certificate will be matched against. Should only be passed
393 if *ssl* is not ``None``. By default the value of the *host* argument
Victor Stinnerea3183f2013-12-03 01:08:00 +0100394 is used. If *host* is empty, there is no default and you must pass a
395 value for *server_hostname*. If *server_hostname* is an empty
396 string, hostname matching is disabled (which is a serious security
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400397 risk, allowing for potential man-in-the-middle attacks).
Victor Stinnerea3183f2013-12-03 01:08:00 +0100398
399 * *family*, *proto*, *flags* are the optional address family, protocol
400 and flags to be passed through to getaddrinfo() for *host* resolution.
401 If given, these should all be integers from the corresponding
402 :mod:`socket` module constants.
403
twisteroid ambassador88f07a82019-05-05 19:14:35 +0800404 * *happy_eyeballs_delay*, if given, enables Happy Eyeballs for this
405 connection. It should
406 be a floating-point number representing the amount of time in seconds
407 to wait for a connection attempt to complete, before starting the next
408 attempt in parallel. This is the "Connection Attempt Delay" as defined
409 in :rfc:`8305`. A sensible default value recommended by the RFC is ``0.25``
410 (250 milliseconds).
411
412 * *interleave* controls address reordering when a host name resolves to
413 multiple IP addresses.
414 If ``0`` or unspecified, no reordering is done, and addresses are
415 tried in the order returned by :meth:`getaddrinfo`. If a positive integer
416 is specified, the addresses are interleaved by address family, and the
417 given integer is interpreted as "First Address Family Count" as defined
418 in :rfc:`8305`. The default is ``0`` if *happy_eyeballs_delay* is not
419 specified, and ``1`` if it is.
420
Victor Stinnerea3183f2013-12-03 01:08:00 +0100421 * *sock*, if given, should be an existing, already connected
422 :class:`socket.socket` object to be used by the transport.
twisteroid ambassador88f07a82019-05-05 19:14:35 +0800423 If *sock* is given, none of *host*, *port*, *family*, *proto*, *flags*,
424 *happy_eyeballs_delay*, *interleave*
Victor Stinnerea3183f2013-12-03 01:08:00 +0100425 and *local_addr* should be specified.
426
427 * *local_addr*, if given, is a ``(local_host, local_port)`` tuple used
428 to bind the socket to locally. The *local_host* and *local_port*
Carol Willing5b7cbd62018-09-12 17:05:17 -0700429 are looked up using ``getaddrinfo()``, similarly to *host* and *port*.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100430
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400431 * *ssl_handshake_timeout* is (for a TLS connection) the time in seconds
432 to wait for the TLS handshake to complete before aborting the connection.
Yury Selivanov96026432018-06-04 11:32:35 -0400433 ``60.0`` seconds if ``None`` (default).
Neil Aspinallf7686c12017-12-19 19:45:42 +0000434
twisteroid ambassador88f07a82019-05-05 19:14:35 +0800435 .. versionadded:: 3.8
436
437 The *happy_eyeballs_delay* and *interleave* parameters.
438
Neil Aspinallf7686c12017-12-19 19:45:42 +0000439 .. versionadded:: 3.7
440
441 The *ssl_handshake_timeout* parameter.
442
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700443 .. versionchanged:: 3.6
444
445 The socket option :py:data:`~socket.TCP_NODELAY` is set by default
446 for all TCP connections.
447
Victor Stinner60208a12015-09-15 22:41:52 +0200448 .. versionchanged:: 3.5
449
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400450 Added support for SSL/TLS in :class:`ProactorEventLoop`.
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200451
Victor Stinnerc8ea8132014-01-23 11:02:09 +0100452 .. seealso::
453
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700454 The :func:`open_connection` function is a high-level alternative
455 API. It returns a pair of (:class:`StreamReader`, :class:`StreamWriter`)
456 that can be used directly in async/await code.
Victor Stinnerc8ea8132014-01-23 11:02:09 +0100457
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700458.. coroutinemethod:: loop.create_datagram_endpoint(protocol_factory, \
459 local_addr=None, remote_addr=None, \*, \
460 family=0, proto=0, flags=0, \
461 reuse_address=None, reuse_port=None, \
462 allow_broadcast=None, sock=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100463
Miss Islington (bot)79c29742019-12-09 06:39:54 -0800464 .. note::
465 The parameter *reuse_address* is no longer supported, as using
466 :py:data:`~sockets.SO_REUSEADDR` poses a significant security concern for
467 UDP. Explicitly passing ``reuse_address=True`` will raise an exception.
468
469 When multiple processes with differing UIDs assign sockets to an
Miss Islington (bot)7eb8c6d2019-12-23 07:52:29 -0800470 identical UDP socket address with ``SO_REUSEADDR``, incoming packets can
Miss Islington (bot)79c29742019-12-09 06:39:54 -0800471 become randomly distributed among the sockets.
472
473 For supported platforms, *reuse_port* can be used as a replacement for
474 similar functionality. With *reuse_port*,
475 :py:data:`~sockets.SO_REUSEPORT` is used instead, which specifically
476 prevents processes with differing UIDs from assigning sockets to the same
477 socket address.
478
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700479 Create a datagram connection.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100480
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700481 The socket family can be either :py:data:`~socket.AF_INET`,
482 :py:data:`~socket.AF_INET6`, or :py:data:`~socket.AF_UNIX`,
483 depending on *host* (or the *family* argument, if provided).
Victor Stinnera6919aa2014-02-19 13:32:34 +0100484
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700485 The socket type will be :py:data:`~socket.SOCK_DGRAM`.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100486
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700487 *protocol_factory* must be a callable returning a
488 :ref:`protocol <asyncio-protocol>` implementation.
489
490 A tuple of ``(transport, protocol)`` is returned on success.
491
492 Other arguments:
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700493
494 * *local_addr*, if given, is a ``(local_host, local_port)`` tuple used
495 to bind the socket to locally. The *local_host* and *local_port*
496 are looked up using :meth:`getaddrinfo`.
497
498 * *remote_addr*, if given, is a ``(remote_host, remote_port)`` tuple used
499 to connect the socket to a remote address. The *remote_host* and
500 *remote_port* are looked up using :meth:`getaddrinfo`.
501
502 * *family*, *proto*, *flags* are the optional address family, protocol
503 and flags to be passed through to :meth:`getaddrinfo` for *host*
504 resolution. If given, these should all be integers from the
505 corresponding :mod:`socket` module constants.
506
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700507 * *reuse_port* tells the kernel to allow this endpoint to be bound to the
508 same port as other existing endpoints are bound to, so long as they all
509 set this flag when being created. This option is not supported on Windows
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400510 and some Unixes. If the :py:data:`~socket.SO_REUSEPORT` constant is not
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700511 defined then this capability is unsupported.
512
513 * *allow_broadcast* tells the kernel to allow this endpoint to send
514 messages to the broadcast address.
515
516 * *sock* can optionally be specified in order to use a preexisting,
517 already connected, :class:`socket.socket` object to be used by the
518 transport. If specified, *local_addr* and *remote_addr* should be omitted
519 (must be :const:`None`).
Victor Stinnera6919aa2014-02-19 13:32:34 +0100520
Victor Stinnerc7edffd2014-10-12 11:24:26 +0200521 See :ref:`UDP echo client protocol <asyncio-udp-echo-client-protocol>` and
522 :ref:`UDP echo server protocol <asyncio-udp-echo-server-protocol>` examples.
523
Romuald Brunet0ded5802018-05-14 18:22:00 +0200524 .. versionchanged:: 3.4.4
525 The *family*, *proto*, *flags*, *reuse_address*, *reuse_port,
526 *allow_broadcast*, and *sock* parameters were added.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100527
Miss Islington (bot)79c29742019-12-09 06:39:54 -0800528 .. versionchanged:: 3.8.1
529 The *reuse_address* parameter is no longer supported due to security
530 concerns.
531
Andrew Svetlovbafd4b52019-05-28 12:52:15 +0300532 .. versionchanged:: 3.8
533 Added support for Windows.
534
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700535.. coroutinemethod:: loop.create_unix_connection(protocol_factory, \
536 path=None, \*, ssl=None, sock=None, \
537 server_hostname=None, ssl_handshake_timeout=None)
Victor Stinnera6919aa2014-02-19 13:32:34 +0100538
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400539 Create a Unix connection.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100540
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700541 The socket family will be :py:data:`~socket.AF_UNIX`; socket
542 type will be :py:data:`~socket.SOCK_STREAM`.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100543
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700544 A tuple of ``(transport, protocol)`` is returned on success.
Guido van Rossum9e80eeb2016-11-03 14:17:25 -0700545
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400546 *path* is the name of a Unix domain socket and is required,
547 unless a *sock* parameter is specified. Abstract Unix sockets,
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700548 :class:`str`, :class:`bytes`, and :class:`~pathlib.Path` paths are
549 supported.
550
551 See the documentation of the :meth:`loop.create_connection` method
552 for information about arguments to this method.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100553
Cheryl Sabella2d6097d2018-10-12 10:55:20 -0400554 .. availability:: Unix.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100555
Neil Aspinallf7686c12017-12-19 19:45:42 +0000556 .. versionadded:: 3.7
557
558 The *ssl_handshake_timeout* parameter.
559
Yury Selivanov423fd362017-11-20 17:26:28 -0500560 .. versionchanged:: 3.7
561
Elvis Pranskevichusc0d062f2018-06-08 11:36:00 -0400562 The *path* parameter can now be a :term:`path-like object`.
Yury Selivanov423fd362017-11-20 17:26:28 -0500563
Victor Stinnera6919aa2014-02-19 13:32:34 +0100564
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700565Creating network servers
566^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +0100567
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700568.. coroutinemethod:: loop.create_server(protocol_factory, \
569 host=None, port=None, \*, \
570 family=socket.AF_UNSPEC, \
571 flags=socket.AI_PASSIVE, \
572 sock=None, backlog=100, ssl=None, \
573 reuse_address=None, reuse_port=None, \
574 ssl_handshake_timeout=None, start_serving=True)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100575
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700576 Create a TCP server (socket type :data:`~socket.SOCK_STREAM`) listening
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400577 on *port* of the *host* address.
Victor Stinner33f6abe2014-10-12 20:36:04 +0200578
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700579 Returns a :class:`Server` object.
Victor Stinner33f6abe2014-10-12 20:36:04 +0200580
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700581 Arguments:
Victor Stinner33f6abe2014-10-12 20:36:04 +0200582
Bumsik Kim5cc583d2018-09-16 19:40:44 -0400583 * *protocol_factory* must be a callable returning a
584 :ref:`protocol <asyncio-protocol>` implementation.
585
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400586 * The *host* parameter can be set to several types which determine where
587 the server would be listening:
588
589 - If *host* is a string, the TCP server is bound to a single network
590 interface specified by *host*.
591
592 - If *host* is a sequence of strings, the TCP server is bound to all
593 network interfaces specified by the sequence.
594
595 - If *host* is an empty string or ``None``, all interfaces are
596 assumed and a list of multiple sockets will be returned (most likely
597 one for IPv4 and another one for IPv6).
Victor Stinner33f6abe2014-10-12 20:36:04 +0200598
599 * *family* can be set to either :data:`socket.AF_INET` or
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700600 :data:`~socket.AF_INET6` to force the socket to use IPv4 or IPv6.
Carol Willing5b7cbd62018-09-12 17:05:17 -0700601 If not set, the *family* will be determined from host name
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700602 (defaults to :data:`~socket.AF_UNSPEC`).
Victor Stinner33f6abe2014-10-12 20:36:04 +0200603
604 * *flags* is a bitmask for :meth:`getaddrinfo`.
605
606 * *sock* can optionally be specified in order to use a preexisting
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400607 socket object. If specified, *host* and *port* must not be specified.
Victor Stinner33f6abe2014-10-12 20:36:04 +0200608
609 * *backlog* is the maximum number of queued connections passed to
610 :meth:`~socket.socket.listen` (defaults to 100).
611
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400612 * *ssl* can be set to an :class:`~ssl.SSLContext` instance to enable
613 TLS over the accepted connections.
Victor Stinner33f6abe2014-10-12 20:36:04 +0200614
615 * *reuse_address* tells the kernel to reuse a local socket in
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700616 ``TIME_WAIT`` state, without waiting for its natural timeout to
Serhiy Storchaka4adf01c2016-10-19 18:30:05 +0300617 expire. If not specified will automatically be set to ``True`` on
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400618 Unix.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100619
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700620 * *reuse_port* tells the kernel to allow this endpoint to be bound to the
621 same port as other existing endpoints are bound to, so long as they all
622 set this flag when being created. This option is not supported on
623 Windows.
624
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400625 * *ssl_handshake_timeout* is (for a TLS server) the time in seconds to wait
626 for the TLS handshake to complete before aborting the connection.
Yury Selivanov96026432018-06-04 11:32:35 -0400627 ``60.0`` seconds if ``None`` (default).
Neil Aspinallf7686c12017-12-19 19:45:42 +0000628
Yury Selivanovc9070d02018-01-25 18:08:09 -0500629 * *start_serving* set to ``True`` (the default) causes the created server
630 to start accepting connections immediately. When set to ``False``,
631 the user should await on :meth:`Server.start_serving` or
632 :meth:`Server.serve_forever` to make the server to start accepting
633 connections.
634
Neil Aspinallf7686c12017-12-19 19:45:42 +0000635 .. versionadded:: 3.7
636
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700637 Added *ssl_handshake_timeout* and *start_serving* parameters.
638
639 .. versionchanged:: 3.6
640
641 The socket option :py:data:`~socket.TCP_NODELAY` is set by default
642 for all TCP connections.
Neil Aspinallf7686c12017-12-19 19:45:42 +0000643
Victor Stinner60208a12015-09-15 22:41:52 +0200644 .. versionchanged:: 3.5
645
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400646 Added support for SSL/TLS in :class:`ProactorEventLoop`.
Victor Stinnerc8ea8132014-01-23 11:02:09 +0100647
Victor Stinner7b58a2b2015-09-21 18:41:05 +0200648 .. versionchanged:: 3.5.1
Victor Stinner5e4a7d82015-09-21 18:33:43 +0200649
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700650 The *host* parameter can be a sequence of strings.
651
652 .. seealso::
653
654 The :func:`start_server` function is a higher-level alternative API
655 that returns a pair of :class:`StreamReader` and :class:`StreamWriter`
656 that can be used in an async/await code.
Victor Stinner5e4a7d82015-09-21 18:33:43 +0200657
Victor Stinnerea3183f2013-12-03 01:08:00 +0100658
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700659.. coroutinemethod:: loop.create_unix_server(protocol_factory, path=None, \
660 \*, sock=None, backlog=100, ssl=None, \
661 ssl_handshake_timeout=None, start_serving=True)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100662
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700663 Similar to :meth:`loop.create_server` but works with the
664 :py:data:`~socket.AF_UNIX` socket family.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100665
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400666 *path* is the name of a Unix domain socket, and is required,
667 unless a *sock* argument is provided. Abstract Unix sockets,
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700668 :class:`str`, :class:`bytes`, and :class:`~pathlib.Path` paths
669 are supported.
Yury Selivanov423fd362017-11-20 17:26:28 -0500670
Bumsik Kim5cc583d2018-09-16 19:40:44 -0400671 See the documentation of the :meth:`loop.create_server` method
672 for information about arguments to this method.
673
Cheryl Sabella2d6097d2018-10-12 10:55:20 -0400674 .. availability:: Unix.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100675
Neil Aspinallf7686c12017-12-19 19:45:42 +0000676 .. versionadded:: 3.7
677
Elvis Pranskevichusc0d062f2018-06-08 11:36:00 -0400678 The *ssl_handshake_timeout* and *start_serving* parameters.
Neil Aspinallf7686c12017-12-19 19:45:42 +0000679
Yury Selivanov423fd362017-11-20 17:26:28 -0500680 .. versionchanged:: 3.7
681
682 The *path* parameter can now be a :class:`~pathlib.Path` object.
683
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700684.. coroutinemethod:: loop.connect_accepted_socket(protocol_factory, \
685 sock, \*, ssl=None, ssl_handshake_timeout=None)
Yury Selivanov3b3a1412016-11-07 15:35:25 -0500686
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700687 Wrap an already accepted connection into a transport/protocol pair.
Yury Selivanov3b3a1412016-11-07 15:35:25 -0500688
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700689 This method can be used by servers that accept connections outside
690 of asyncio but that use asyncio to handle them.
Yury Selivanov3b3a1412016-11-07 15:35:25 -0500691
692 Parameters:
693
Bumsik Kim5cc583d2018-09-16 19:40:44 -0400694 * *protocol_factory* must be a callable returning a
695 :ref:`protocol <asyncio-protocol>` implementation.
696
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700697 * *sock* is a preexisting socket object returned from
698 :meth:`socket.accept <socket.socket.accept>`.
Yury Selivanov3b3a1412016-11-07 15:35:25 -0500699
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700700 * *ssl* can be set to an :class:`~ssl.SSLContext` to enable SSL over
701 the accepted connections.
Yury Selivanov3b3a1412016-11-07 15:35:25 -0500702
Neil Aspinallf7686c12017-12-19 19:45:42 +0000703 * *ssl_handshake_timeout* is (for an SSL connection) the time in seconds to
704 wait for the SSL handshake to complete before aborting the connection.
Yury Selivanov96026432018-06-04 11:32:35 -0400705 ``60.0`` seconds if ``None`` (default).
Neil Aspinallf7686c12017-12-19 19:45:42 +0000706
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700707 Returns a ``(transport, protocol)`` pair.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100708
Neil Aspinallf7686c12017-12-19 19:45:42 +0000709 .. versionadded:: 3.7
710
711 The *ssl_handshake_timeout* parameter.
712
AraHaan431665b2017-11-21 11:06:26 -0500713 .. versionadded:: 3.5.3
714
715
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700716Transferring files
717^^^^^^^^^^^^^^^^^^
Andrew Svetlov7c684072018-01-27 21:22:47 +0200718
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700719.. coroutinemethod:: loop.sendfile(transport, file, \
720 offset=0, count=None, *, fallback=True)
Andrew Svetlov7c684072018-01-27 21:22:47 +0200721
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700722 Send a *file* over a *transport*. Return the total number of bytes
723 sent.
Andrew Svetlov7c684072018-01-27 21:22:47 +0200724
725 The method uses high-performance :meth:`os.sendfile` if available.
726
727 *file* must be a regular file object opened in binary mode.
728
729 *offset* tells from where to start reading the file. If specified,
730 *count* is the total number of bytes to transmit as opposed to
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400731 sending the file until EOF is reached. File position is always updated,
732 even when this method raises an error, and
733 :meth:`file.tell() <io.IOBase.tell>` can be used to obtain the actual
734 number of bytes sent.
Andrew Svetlov7c684072018-01-27 21:22:47 +0200735
736 *fallback* set to ``True`` makes asyncio to manually read and send
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700737 the file when the platform does not support the sendfile system call
Andrew Svetlov7c684072018-01-27 21:22:47 +0200738 (e.g. Windows or SSL socket on Unix).
739
740 Raise :exc:`SendfileNotAvailableError` if the system does not support
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400741 the *sendfile* syscall and *fallback* is ``False``.
Andrew Svetlov7c684072018-01-27 21:22:47 +0200742
743 .. versionadded:: 3.7
744
745
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500746TLS Upgrade
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700747^^^^^^^^^^^
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500748
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700749.. coroutinemethod:: loop.start_tls(transport, protocol, \
750 sslcontext, \*, server_side=False, \
751 server_hostname=None, ssl_handshake_timeout=None)
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500752
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700753 Upgrade an existing transport-based connection to TLS.
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500754
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700755 Return a new transport instance, that the *protocol* must start using
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500756 immediately after the *await*. The *transport* instance passed to
757 the *start_tls* method should never be used again.
758
759 Parameters:
760
761 * *transport* and *protocol* instances that methods like
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700762 :meth:`~loop.create_server` and
763 :meth:`~loop.create_connection` return.
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500764
765 * *sslcontext*: a configured instance of :class:`~ssl.SSLContext`.
766
767 * *server_side* pass ``True`` when a server-side connection is being
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700768 upgraded (like the one created by :meth:`~loop.create_server`).
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500769
770 * *server_hostname*: sets or overrides the host name that the target
771 server's certificate will be matched against.
772
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400773 * *ssl_handshake_timeout* is (for a TLS connection) the time in seconds to
774 wait for the TLS handshake to complete before aborting the connection.
Yury Selivanov96026432018-06-04 11:32:35 -0400775 ``60.0`` seconds if ``None`` (default).
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500776
777 .. versionadded:: 3.7
778
779
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700780Watching file descriptors
781^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerc1567df2014-02-08 23:22:58 +0100782
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700783.. method:: loop.add_reader(fd, callback, \*args)
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200784
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400785 Start monitoring the *fd* file descriptor for read availability and
786 invoke *callback* with the specified arguments once *fd* is available for
787 reading.
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200788
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700789.. method:: loop.remove_reader(fd)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100790
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400791 Stop monitoring the *fd* file descriptor for read availability.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100792
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700793.. method:: loop.add_writer(fd, callback, \*args)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100794
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400795 Start monitoring the *fd* file descriptor for write availability and
796 invoke *callback* with the specified arguments once *fd* is available for
797 writing.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100798
Yury Selivanove247b462018-09-20 12:43:59 -0400799 Use :func:`functools.partial` :ref:`to pass keyword arguments
Naglis17473342018-12-04 09:31:15 +0200800 <asyncio-pass-keywords>` to *callback*.
Victor Stinner8464c242014-11-28 13:15:41 +0100801
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700802.. method:: loop.remove_writer(fd)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100803
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400804 Stop monitoring the *fd* file descriptor for write availability.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100805
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700806See also :ref:`Platform Support <asyncio-platform-support>` section
807for some limitations of these methods.
Victor Stinner04e6df32014-10-11 16:16:27 +0200808
Victor Stinnerc1567df2014-02-08 23:22:58 +0100809
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700810Working with socket objects directly
811^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerc1567df2014-02-08 23:22:58 +0100812
Carol Willing5b7cbd62018-09-12 17:05:17 -0700813In general, protocol implementations that use transport-based APIs
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700814such as :meth:`loop.create_connection` and :meth:`loop.create_server`
815are faster than implementations that work with sockets directly.
Carol Willing5b7cbd62018-09-12 17:05:17 -0700816However, there are some use cases when performance is not critical, and
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700817working with :class:`~socket.socket` objects directly is more
818convenient.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100819
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700820.. coroutinemethod:: loop.sock_recv(sock, nbytes)
Yury Selivanov55c50842016-06-08 12:48:15 -0400821
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400822 Receive up to *nbytes* from *sock*. Asynchronous version of
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700823 :meth:`socket.recv() <socket.socket.recv>`.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100824
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400825 Return the received data as a bytes object.
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700826
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400827 *sock* must be a non-blocking socket.
Victor Stinnerec2ce092014-07-29 23:12:22 +0200828
Yury Selivanov19a44f62017-12-14 20:53:26 -0500829 .. versionchanged:: 3.7
Carol Willing5b7cbd62018-09-12 17:05:17 -0700830 Even though this method was always documented as a coroutine
831 method, releases before Python 3.7 returned a :class:`Future`.
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700832 Since Python 3.7 this is an ``async def`` method.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100833
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700834.. coroutinemethod:: loop.sock_recv_into(sock, buf)
Antoine Pitrou525f40d2017-10-19 21:46:40 +0200835
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400836 Receive data from *sock* into the *buf* buffer. Modeled after the blocking
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700837 :meth:`socket.recv_into() <socket.socket.recv_into>` method.
Antoine Pitrou525f40d2017-10-19 21:46:40 +0200838
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700839 Return the number of bytes written to the buffer.
Antoine Pitrou525f40d2017-10-19 21:46:40 +0200840
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400841 *sock* must be a non-blocking socket.
Antoine Pitrou525f40d2017-10-19 21:46:40 +0200842
Antoine Pitrou525f40d2017-10-19 21:46:40 +0200843 .. versionadded:: 3.7
844
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700845.. coroutinemethod:: loop.sock_sendall(sock, data)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100846
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400847 Send *data* to the *sock* socket. Asynchronous version of
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700848 :meth:`socket.sendall() <socket.socket.sendall>`.
Yury Selivanov55c50842016-06-08 12:48:15 -0400849
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400850 This method continues to send to the socket until either all data
851 in *data* has been sent or an error occurs. ``None`` is returned
Carol Willing5b7cbd62018-09-12 17:05:17 -0700852 on success. On error, an exception is raised. Additionally, there is no way
853 to determine how much data, if any, was successfully processed by the
854 receiving end of the connection.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100855
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400856 *sock* must be a non-blocking socket.
Victor Stinnerec2ce092014-07-29 23:12:22 +0200857
Yury Selivanov19a44f62017-12-14 20:53:26 -0500858 .. versionchanged:: 3.7
859 Even though the method was always documented as a coroutine
860 method, before Python 3.7 it returned an :class:`Future`.
861 Since Python 3.7, this is an ``async def`` method.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100862
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700863.. coroutinemethod:: loop.sock_connect(sock, address)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100864
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400865 Connect *sock* to a remote socket at *address*.
Victor Stinner1b0580b2014-02-13 09:24:37 +0100866
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700867 Asynchronous version of :meth:`socket.connect() <socket.socket.connect>`.
868
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400869 *sock* must be a non-blocking socket.
Victor Stinnerec2ce092014-07-29 23:12:22 +0200870
Yury Selivanov55c50842016-06-08 12:48:15 -0400871 .. versionchanged:: 3.5.2
872 ``address`` no longer needs to be resolved. ``sock_connect``
873 will try to check if the *address* is already resolved by calling
874 :func:`socket.inet_pton`. If not,
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700875 :meth:`loop.getaddrinfo` will be used to resolve the
Yury Selivanov55c50842016-06-08 12:48:15 -0400876 *address*.
877
Victor Stinnerc1567df2014-02-08 23:22:58 +0100878 .. seealso::
879
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700880 :meth:`loop.create_connection`
Yury Selivanov55c50842016-06-08 12:48:15 -0400881 and :func:`asyncio.open_connection() <open_connection>`.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100882
883
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700884.. coroutinemethod:: loop.sock_accept(sock)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100885
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700886 Accept a connection. Modeled after the blocking
887 :meth:`socket.accept() <socket.socket.accept>` method.
Yury Selivanov55c50842016-06-08 12:48:15 -0400888
889 The socket must be bound to an address and listening
Victor Stinnerc1567df2014-02-08 23:22:58 +0100890 for connections. The return value is a pair ``(conn, address)`` where *conn*
891 is a *new* socket object usable to send and receive data on the connection,
892 and *address* is the address bound to the socket on the other end of the
893 connection.
894
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400895 *sock* must be a non-blocking socket.
Victor Stinnerec2ce092014-07-29 23:12:22 +0200896
Yury Selivanov19a44f62017-12-14 20:53:26 -0500897 .. versionchanged:: 3.7
898 Even though the method was always documented as a coroutine
899 method, before Python 3.7 it returned a :class:`Future`.
900 Since Python 3.7, this is an ``async def`` method.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100901
902 .. seealso::
903
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700904 :meth:`loop.create_server` and :func:`start_server`.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100905
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700906.. coroutinemethod:: loop.sock_sendfile(sock, file, offset=0, count=None, \
907 \*, fallback=True)
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200908
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700909 Send a file using high-performance :mod:`os.sendfile` if possible.
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400910 Return the total number of bytes sent.
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200911
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700912 Asynchronous version of :meth:`socket.sendfile() <socket.socket.sendfile>`.
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200913
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400914 *sock* must be a non-blocking :const:`socket.SOCK_STREAM`
915 :class:`~socket.socket`.
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200916
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400917 *file* must be a regular file object open in binary mode.
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200918
919 *offset* tells from where to start reading the file. If specified,
920 *count* is the total number of bytes to transmit as opposed to
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400921 sending the file until EOF is reached. File position is always updated,
922 even when this method raises an error, and
923 :meth:`file.tell() <io.IOBase.tell>` can be used to obtain the actual
924 number of bytes sent.
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200925
Carol Willing5b7cbd62018-09-12 17:05:17 -0700926 *fallback*, when set to ``True``, makes asyncio manually read and send
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200927 the file when the platform does not support the sendfile syscall
928 (e.g. Windows or SSL socket on Unix).
929
Andrew Svetlov7464e872018-01-19 20:04:29 +0200930 Raise :exc:`SendfileNotAvailableError` if the system does not support
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200931 *sendfile* syscall and *fallback* is ``False``.
932
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400933 *sock* must be a non-blocking socket.
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700934
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200935 .. versionadded:: 3.7
936
Victor Stinnerc1567df2014-02-08 23:22:58 +0100937
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700938DNS
939^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +0100940
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700941.. coroutinemethod:: loop.getaddrinfo(host, port, \*, family=0, \
942 type=0, proto=0, flags=0)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100943
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700944 Asynchronous version of :meth:`socket.getaddrinfo`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100945
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700946.. coroutinemethod:: loop.getnameinfo(sockaddr, flags=0)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100947
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700948 Asynchronous version of :meth:`socket.getnameinfo`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100949
Yury Selivanovbec23722018-01-28 14:09:40 -0500950.. versionchanged:: 3.7
951 Both *getaddrinfo* and *getnameinfo* methods were always documented
952 to return a coroutine, but prior to Python 3.7 they were, in fact,
953 returning :class:`asyncio.Future` objects. Starting with Python 3.7
954 both methods are coroutines.
955
Victor Stinnerea3183f2013-12-03 01:08:00 +0100956
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700957Working with pipes
958^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +0100959
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700960.. coroutinemethod:: loop.connect_read_pipe(protocol_factory, pipe)
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200961
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400962 Register the read end of *pipe* in the event loop.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100963
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700964 *protocol_factory* must be a callable returning an
965 :ref:`asyncio protocol <asyncio-protocol>` implementation.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100966
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700967 *pipe* is a :term:`file-like object <file object>`.
968
969 Return pair ``(transport, protocol)``, where *transport* supports
Bumsik Kim5cc583d2018-09-16 19:40:44 -0400970 the :class:`ReadTransport` interface and *protocol* is an object
971 instantiated by the *protocol_factory*.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100972
Victor Stinnerd84fd732014-08-26 01:01:59 +0200973 With :class:`SelectorEventLoop` event loop, the *pipe* is set to
974 non-blocking mode.
975
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700976.. coroutinemethod:: loop.connect_write_pipe(protocol_factory, pipe)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100977
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400978 Register the write end of *pipe* in the event loop.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100979
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700980 *protocol_factory* must be a callable returning an
981 :ref:`asyncio protocol <asyncio-protocol>` implementation.
982
983 *pipe* is :term:`file-like object <file object>`.
984
Victor Stinner2cef3002014-10-23 22:38:46 +0200985 Return pair ``(transport, protocol)``, where *transport* supports
Bumsik Kim5cc583d2018-09-16 19:40:44 -0400986 :class:`WriteTransport` interface and *protocol* is an object
987 instantiated by the *protocol_factory*.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100988
Victor Stinnerd84fd732014-08-26 01:01:59 +0200989 With :class:`SelectorEventLoop` event loop, the *pipe* is set to
990 non-blocking mode.
991
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700992.. note::
993
994 :class:`SelectorEventLoop` does not support the above methods on
Carol Willing5b7cbd62018-09-12 17:05:17 -0700995 Windows. Use :class:`ProactorEventLoop` instead for Windows.
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700996
Victor Stinner08444382014-02-02 22:43:39 +0100997.. seealso::
998
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700999 The :meth:`loop.subprocess_exec` and
1000 :meth:`loop.subprocess_shell` methods.
Victor Stinner08444382014-02-02 22:43:39 +01001001
Victor Stinnerea3183f2013-12-03 01:08:00 +01001002
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001003Unix signals
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001004^^^^^^^^^^^^
Victor Stinner8b863482014-01-27 10:07:50 +01001005
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001006.. method:: loop.add_signal_handler(signum, callback, \*args)
Victor Stinner8b863482014-01-27 10:07:50 +01001007
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001008 Set *callback* as the handler for the *signum* signal.
Victor Stinner8b863482014-01-27 10:07:50 +01001009
Hrvoje Nikšiće3666fc2018-12-18 22:31:29 +01001010 The callback will be invoked by *loop*, along with other queued callbacks
1011 and runnable coroutines of that event loop. Unlike signal handlers
1012 registered using :func:`signal.signal`, a callback registered with this
1013 function is allowed to interact with the event loop.
1014
Victor Stinner8b863482014-01-27 10:07:50 +01001015 Raise :exc:`ValueError` if the signal number is invalid or uncatchable.
1016 Raise :exc:`RuntimeError` if there is a problem setting up the handler.
1017
Yury Selivanove247b462018-09-20 12:43:59 -04001018 Use :func:`functools.partial` :ref:`to pass keyword arguments
Naglis17473342018-12-04 09:31:15 +02001019 <asyncio-pass-keywords>` to *callback*.
Victor Stinner8464c242014-11-28 13:15:41 +01001020
Hrvoje Nikšiće3666fc2018-12-18 22:31:29 +01001021 Like :func:`signal.signal`, this function must be invoked in the main
1022 thread.
1023
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001024.. method:: loop.remove_signal_handler(sig)
Victor Stinner8b863482014-01-27 10:07:50 +01001025
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001026 Remove the handler for the *sig* signal.
Victor Stinner8b863482014-01-27 10:07:50 +01001027
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001028 Return ``True`` if the signal handler was removed, or ``False`` if
1029 no handler was set for the given signal.
Victor Stinner8b863482014-01-27 10:07:50 +01001030
Cheryl Sabella2d6097d2018-10-12 10:55:20 -04001031 .. availability:: Unix.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001032
Victor Stinner8b863482014-01-27 10:07:50 +01001033.. seealso::
1034
1035 The :mod:`signal` module.
1036
1037
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001038Executing code in thread or process pools
1039^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +01001040
Yury Selivanov47150392018-09-18 17:55:44 -04001041.. awaitablemethod:: loop.run_in_executor(executor, func, \*args)
Victor Stinnerea3183f2013-12-03 01:08:00 +01001042
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001043 Arrange for *func* to be called in the specified executor.
Victor Stinnerea3183f2013-12-03 01:08:00 +01001044
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001045 The *executor* argument should be an :class:`concurrent.futures.Executor`
Larry Hastings3732ed22014-03-15 21:13:56 -07001046 instance. The default executor is used if *executor* is ``None``.
Victor Stinnerea3183f2013-12-03 01:08:00 +01001047
Yury Selivanove247b462018-09-20 12:43:59 -04001048 Example::
1049
1050 import asyncio
1051 import concurrent.futures
1052
1053 def blocking_io():
1054 # File operations (such as logging) can block the
1055 # event loop: run them in a thread pool.
1056 with open('/dev/urandom', 'rb') as f:
1057 return f.read(100)
1058
1059 def cpu_bound():
1060 # CPU-bound operations will block the event loop:
1061 # in general it is preferable to run them in a
1062 # process pool.
1063 return sum(i * i for i in range(10 ** 7))
1064
1065 async def main():
1066 loop = asyncio.get_running_loop()
1067
1068 ## Options:
1069
1070 # 1. Run in the default loop's executor:
1071 result = await loop.run_in_executor(
1072 None, blocking_io)
1073 print('default thread pool', result)
1074
1075 # 2. Run in a custom thread pool:
1076 with concurrent.futures.ThreadPoolExecutor() as pool:
1077 result = await loop.run_in_executor(
1078 pool, blocking_io)
1079 print('custom thread pool', result)
1080
1081 # 3. Run in a custom process pool:
1082 with concurrent.futures.ProcessPoolExecutor() as pool:
1083 result = await loop.run_in_executor(
1084 pool, cpu_bound)
1085 print('custom process pool', result)
1086
1087 asyncio.run(main())
Victor Stinner8464c242014-11-28 13:15:41 +01001088
Yury Selivanovbec23722018-01-28 14:09:40 -05001089 This method returns a :class:`asyncio.Future` object.
1090
Yury Selivanove247b462018-09-20 12:43:59 -04001091 Use :func:`functools.partial` :ref:`to pass keyword arguments
1092 <asyncio-pass-keywords>` to *func*.
1093
Yury Selivanove8a60452016-10-21 17:40:42 -04001094 .. versionchanged:: 3.5.3
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001095 :meth:`loop.run_in_executor` no longer configures the
Yury Selivanove8a60452016-10-21 17:40:42 -04001096 ``max_workers`` of the thread pool executor it creates, instead
1097 leaving it up to the thread pool executor
1098 (:class:`~concurrent.futures.ThreadPoolExecutor`) to set the
1099 default.
1100
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001101.. method:: loop.set_default_executor(executor)
Victor Stinnerea3183f2013-12-03 01:08:00 +01001102
Elvis Pranskevichus22d25082018-07-30 11:42:43 +01001103 Set *executor* as the default executor used by :meth:`run_in_executor`.
1104 *executor* should be an instance of
1105 :class:`~concurrent.futures.ThreadPoolExecutor`.
1106
1107 .. deprecated:: 3.8
1108 Using an executor that is not an instance of
1109 :class:`~concurrent.futures.ThreadPoolExecutor` is deprecated and
1110 will trigger an error in Python 3.9.
Victor Stinnerea3183f2013-12-03 01:08:00 +01001111
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001112 *executor* must be an instance of
1113 :class:`concurrent.futures.ThreadPoolExecutor`.
1114
Victor Stinnerea3183f2013-12-03 01:08:00 +01001115
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001116Error Handling API
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001117^^^^^^^^^^^^^^^^^^
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001118
Martin Panterc04fb562016-02-10 05:44:01 +00001119Allows customizing how exceptions are handled in the event loop.
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001120
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001121.. method:: loop.set_exception_handler(handler)
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001122
1123 Set *handler* as the new event loop exception handler.
1124
1125 If *handler* is ``None``, the default exception handler will
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001126 be set. Otherwise, *handler* must be a callable with the signature
1127 matching ``(loop, context)``, where ``loop``
1128 is a reference to the active event loop, and ``context``
1129 is a ``dict`` object containing the details of the exception
1130 (see :meth:`call_exception_handler` documentation for details
1131 about context).
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001132
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001133.. method:: loop.get_exception_handler()
Yury Selivanov950204d2016-05-16 16:23:00 -04001134
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001135 Return the current exception handler, or ``None`` if no custom
1136 exception handler was set.
Yury Selivanov950204d2016-05-16 16:23:00 -04001137
1138 .. versionadded:: 3.5.2
1139
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001140.. method:: loop.default_exception_handler(context)
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001141
1142 Default exception handler.
1143
1144 This is called when an exception occurs and no exception
Carol Willing5b7cbd62018-09-12 17:05:17 -07001145 handler is set. This can be called by a custom exception
1146 handler that wants to defer to the default handler behavior.
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001147
1148 *context* parameter has the same meaning as in
1149 :meth:`call_exception_handler`.
1150
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001151.. method:: loop.call_exception_handler(context)
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001152
1153 Call the current event loop exception handler.
1154
1155 *context* is a ``dict`` object containing the following keys
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001156 (new keys may be introduced in future Python versions):
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001157
1158 * 'message': Error message;
1159 * 'exception' (optional): Exception object;
1160 * 'future' (optional): :class:`asyncio.Future` instance;
1161 * 'handle' (optional): :class:`asyncio.Handle` instance;
1162 * 'protocol' (optional): :ref:`Protocol <asyncio-protocol>` instance;
1163 * 'transport' (optional): :ref:`Transport <asyncio-transport>` instance;
1164 * 'socket' (optional): :class:`socket.socket` instance.
1165
1166 .. note::
1167
Carol Willing5b7cbd62018-09-12 17:05:17 -07001168 This method should not be overloaded in subclassed
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001169 event loops. For custom exception handling, use
1170 the :meth:`set_exception_handler()` method.
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001171
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001172Enabling debug mode
1173^^^^^^^^^^^^^^^^^^^
Victor Stinner0f3e6bc2014-02-19 23:15:02 +01001174
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001175.. method:: loop.get_debug()
Victor Stinner0f3e6bc2014-02-19 23:15:02 +01001176
Victor Stinner7b7120e2014-06-23 00:12:14 +02001177 Get the debug mode (:class:`bool`) of the event loop.
1178
1179 The default value is ``True`` if the environment variable
1180 :envvar:`PYTHONASYNCIODEBUG` is set to a non-empty string, ``False``
1181 otherwise.
Victor Stinner0f3e6bc2014-02-19 23:15:02 +01001182
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001183.. method:: loop.set_debug(enabled: bool)
Victor Stinner0f3e6bc2014-02-19 23:15:02 +01001184
1185 Set the debug mode of the event loop.
1186
Yury Selivanov805e27e2018-09-14 16:57:11 -07001187 .. versionchanged:: 3.7
1188
1189 The new ``-X dev`` command line option can now also be used
1190 to enable the debug mode.
1191
Victor Stinner0f3e6bc2014-02-19 23:15:02 +01001192.. seealso::
1193
Victor Stinner62511fd2014-06-23 00:36:11 +02001194 The :ref:`debug mode of asyncio <asyncio-debug-mode>`.
Victor Stinner0f3e6bc2014-02-19 23:15:02 +01001195
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001196
1197Running Subprocesses
1198^^^^^^^^^^^^^^^^^^^^
1199
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001200Methods described in this subsections are low-level. In regular
1201async/await code consider using the high-level
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001202:func:`asyncio.create_subprocess_shell` and
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001203:func:`asyncio.create_subprocess_exec` convenience functions instead.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001204
1205.. note::
1206
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001207 The default asyncio event loop on **Windows** does not support
1208 subprocesses. See :ref:`Subprocess Support on Windows
1209 <asyncio-windows-subprocess>` for details.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001210
1211.. coroutinemethod:: loop.subprocess_exec(protocol_factory, \*args, \
1212 stdin=subprocess.PIPE, stdout=subprocess.PIPE, \
1213 stderr=subprocess.PIPE, \*\*kwargs)
1214
1215 Create a subprocess from one or more string arguments specified by
1216 *args*.
1217
1218 *args* must be a list of strings represented by:
1219
1220 * :class:`str`;
1221 * or :class:`bytes`, encoded to the
1222 :ref:`filesystem encoding <filesystem-encoding>`.
1223
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001224 The first string specifies the program executable,
Carol Willing5b7cbd62018-09-12 17:05:17 -07001225 and the remaining strings specify the arguments. Together, string
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001226 arguments form the ``argv`` of the program.
1227
1228 This is similar to the standard library :class:`subprocess.Popen`
1229 class called with ``shell=False`` and the list of strings passed as
1230 the first argument; however, where :class:`~subprocess.Popen` takes
1231 a single argument which is list of strings, *subprocess_exec*
1232 takes multiple string arguments.
1233
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001234 The *protocol_factory* must be a callable returning a subclass of the
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001235 :class:`asyncio.SubprocessProtocol` class.
1236
1237 Other parameters:
1238
sbstpf0d4c642019-05-27 19:51:19 -04001239 * *stdin* can be any of these:
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001240
sbstpf0d4c642019-05-27 19:51:19 -04001241 * a file-like object representing a pipe to be connected to the
1242 subprocess's standard input stream using
1243 :meth:`~loop.connect_write_pipe`
1244 * the :const:`subprocess.PIPE` constant (default) which will create a new
1245 pipe and connect it,
1246 * the value ``None`` which will make the subprocess inherit the file
1247 descriptor from this process
1248 * the :const:`subprocess.DEVNULL` constant which indicates that the
1249 special :data:`os.devnull` file will be used
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001250
sbstpf0d4c642019-05-27 19:51:19 -04001251 * *stdout* can be any of these:
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001252
sbstpf0d4c642019-05-27 19:51:19 -04001253 * a file-like object representing a pipe to be connected to the
1254 subprocess's standard output stream using
1255 :meth:`~loop.connect_write_pipe`
1256 * the :const:`subprocess.PIPE` constant (default) which will create a new
1257 pipe and connect it,
1258 * the value ``None`` which will make the subprocess inherit the file
1259 descriptor from this process
1260 * the :const:`subprocess.DEVNULL` constant which indicates that the
1261 special :data:`os.devnull` file will be used
1262
1263 * *stderr* can be any of these:
1264
1265 * a file-like object representing a pipe to be connected to the
1266 subprocess's standard error stream using
1267 :meth:`~loop.connect_write_pipe`
1268 * the :const:`subprocess.PIPE` constant (default) which will create a new
1269 pipe and connect it,
1270 * the value ``None`` which will make the subprocess inherit the file
1271 descriptor from this process
1272 * the :const:`subprocess.DEVNULL` constant which indicates that the
1273 special :data:`os.devnull` file will be used
1274 * the :const:`subprocess.STDOUT` constant which will connect the standard
1275 error stream to the process' standard output stream
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001276
1277 * All other keyword arguments are passed to :class:`subprocess.Popen`
sbstpf0d4c642019-05-27 19:51:19 -04001278 without interpretation, except for *bufsize*, *universal_newlines*,
1279 *shell*, *text*, *encoding* and *errors*, which should not be specified
1280 at all.
1281
1282 The ``asyncio`` subprocess API does not support decoding the streams
1283 as text. :func:`bytes.decode` can be used to convert the bytes returned
1284 from the stream to text.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001285
1286 See the constructor of the :class:`subprocess.Popen` class
1287 for documentation on other arguments.
1288
1289 Returns a pair of ``(transport, protocol)``, where *transport*
Bumsik Kim5cc583d2018-09-16 19:40:44 -04001290 conforms to the :class:`asyncio.SubprocessTransport` base class and
1291 *protocol* is an object instantiated by the *protocol_factory*.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001292
1293.. coroutinemethod:: loop.subprocess_shell(protocol_factory, cmd, \*, \
1294 stdin=subprocess.PIPE, stdout=subprocess.PIPE, \
1295 stderr=subprocess.PIPE, \*\*kwargs)
1296
1297 Create a subprocess from *cmd*, which can be a :class:`str` or a
1298 :class:`bytes` string encoded to the
1299 :ref:`filesystem encoding <filesystem-encoding>`,
1300 using the platform's "shell" syntax.
1301
1302 This is similar to the standard library :class:`subprocess.Popen`
1303 class called with ``shell=True``.
1304
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001305 The *protocol_factory* must be a callable returning a subclass of the
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001306 :class:`SubprocessProtocol` class.
1307
1308 See :meth:`~loop.subprocess_exec` for more details about
1309 the remaining arguments.
1310
1311 Returns a pair of ``(transport, protocol)``, where *transport*
Bumsik Kim5cc583d2018-09-16 19:40:44 -04001312 conforms to the :class:`SubprocessTransport` base class and
1313 *protocol* is an object instantiated by the *protocol_factory*.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001314
1315.. note::
1316 It is the application's responsibility to ensure that all whitespace
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001317 and special characters are quoted appropriately to avoid `shell injection
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001318 <https://en.wikipedia.org/wiki/Shell_injection#Shell_injection>`_
1319 vulnerabilities. The :func:`shlex.quote` function can be used to
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001320 properly escape whitespace and special characters in strings that
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001321 are going to be used to construct shell commands.
1322
1323
1324Callback Handles
1325================
1326
1327.. class:: Handle
1328
1329 A callback wrapper object returned by :meth:`loop.call_soon`,
1330 :meth:`loop.call_soon_threadsafe`.
1331
1332 .. method:: cancel()
1333
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001334 Cancel the callback. If the callback has already been canceled
1335 or executed, this method has no effect.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001336
1337 .. method:: cancelled()
1338
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001339 Return ``True`` if the callback was cancelled.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001340
1341 .. versionadded:: 3.7
1342
1343.. class:: TimerHandle
1344
1345 A callback wrapper object returned by :meth:`loop.call_later`,
1346 and :meth:`loop.call_at`.
1347
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001348 This class is a subclass of :class:`Handle`.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001349
1350 .. method:: when()
1351
1352 Return a scheduled callback time as :class:`float` seconds.
1353
1354 The time is an absolute timestamp, using the same time
1355 reference as :meth:`loop.time`.
1356
1357 .. versionadded:: 3.7
1358
1359
1360Server Objects
1361==============
1362
1363Server objects are created by :meth:`loop.create_server`,
1364:meth:`loop.create_unix_server`, :func:`start_server`,
1365and :func:`start_unix_server` functions.
1366
1367Do not instantiate the class directly.
Victor Stinner8c462c52014-01-24 18:11:43 +01001368
Victor Stinner8ebeb032014-07-11 23:47:40 +02001369.. class:: Server
Victor Stinner8c462c52014-01-24 18:11:43 +01001370
Yury Selivanovc9070d02018-01-25 18:08:09 -05001371 *Server* objects are asynchronous context managers. When used in an
1372 ``async with`` statement, it's guaranteed that the Server object is
1373 closed and not accepting new connections when the ``async with``
1374 statement is completed::
1375
1376 srv = await loop.create_server(...)
1377
1378 async with srv:
1379 # some code
1380
Carol Willing5b7cbd62018-09-12 17:05:17 -07001381 # At this point, srv is closed and no longer accepts new connections.
Yury Selivanovc9070d02018-01-25 18:08:09 -05001382
1383
1384 .. versionchanged:: 3.7
1385 Server object is an asynchronous context manager since Python 3.7.
Victor Stinner8c462c52014-01-24 18:11:43 +01001386
1387 .. method:: close()
1388
Victor Stinner4bfb14a2014-07-12 03:20:24 +02001389 Stop serving: close listening sockets and set the :attr:`sockets`
1390 attribute to ``None``.
1391
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001392 The sockets that represent existing incoming client connections
1393 are left open.
Victor Stinner8ebeb032014-07-11 23:47:40 +02001394
Berker Peksag49c9edf2016-01-20 07:14:22 +02001395 The server is closed asynchronously, use the :meth:`wait_closed`
1396 coroutine to wait until the server is closed.
Victor Stinner8c462c52014-01-24 18:11:43 +01001397
Srinivas Reddy Thatiparthy (శ్రీనివాస్ రెడ్డి తాటిపర్తి)1634fc22017-12-30 20:39:32 +05301398 .. method:: get_loop()
1399
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001400 Return the event loop associated with the server object.
Srinivas Reddy Thatiparthy (శ్రీనివాస్ రెడ్డి తాటిపర్తి)1634fc22017-12-30 20:39:32 +05301401
1402 .. versionadded:: 3.7
1403
Yury Selivanovc9070d02018-01-25 18:08:09 -05001404 .. coroutinemethod:: start_serving()
1405
1406 Start accepting connections.
1407
1408 This method is idempotent, so it can be called when
1409 the server is already being serving.
1410
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001411 The *start_serving* keyword-only parameter to
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001412 :meth:`loop.create_server` and
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001413 :meth:`asyncio.start_server` allows creating a Server object
1414 that is not accepting connections initially. In this case
1415 ``Server.start_serving()``, or :meth:`Server.serve_forever` can be used
1416 to make the Server start accepting connections.
Yury Selivanovc9070d02018-01-25 18:08:09 -05001417
1418 .. versionadded:: 3.7
1419
1420 .. coroutinemethod:: serve_forever()
1421
1422 Start accepting connections until the coroutine is cancelled.
1423 Cancellation of ``serve_forever`` task causes the server
1424 to be closed.
1425
1426 This method can be called if the server is already accepting
1427 connections. Only one ``serve_forever`` task can exist per
1428 one *Server* object.
1429
1430 Example::
1431
1432 async def client_connected(reader, writer):
1433 # Communicate with the client with
1434 # reader/writer streams. For example:
1435 await reader.readline()
1436
1437 async def main(host, port):
1438 srv = await asyncio.start_server(
1439 client_connected, host, port)
Andrew Svetlov17ab8f02018-02-17 19:44:35 +02001440 await srv.serve_forever()
Yury Selivanovc9070d02018-01-25 18:08:09 -05001441
1442 asyncio.run(main('127.0.0.1', 0))
1443
1444 .. versionadded:: 3.7
1445
1446 .. method:: is_serving()
1447
1448 Return ``True`` if the server is accepting new connections.
1449
1450 .. versionadded:: 3.7
1451
Victor Stinnerbdd574d2015-02-12 22:49:18 +01001452 .. coroutinemethod:: wait_closed()
Victor Stinner8c462c52014-01-24 18:11:43 +01001453
Victor Stinner8ebeb032014-07-11 23:47:40 +02001454 Wait until the :meth:`close` method completes.
1455
Victor Stinner8ebeb032014-07-11 23:47:40 +02001456 .. attribute:: sockets
1457
Emmanuel Ariasdf5cdc12019-02-22 14:34:41 -03001458 List of :class:`socket.socket` objects the server is listening on.
Victor Stinner8c462c52014-01-24 18:11:43 +01001459
Yury Selivanovc9070d02018-01-25 18:08:09 -05001460 .. versionchanged:: 3.7
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001461 Prior to Python 3.7 ``Server.sockets`` used to return an
1462 internal list of server sockets directly. In 3.7 a copy
Yury Selivanovc9070d02018-01-25 18:08:09 -05001463 of that list is returned.
1464
Victor Stinner8c462c52014-01-24 18:11:43 +01001465
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001466.. _asyncio-event-loops:
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001467
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001468Event Loop Implementations
1469==========================
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001470
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001471asyncio ships with two different event loop implementations:
1472:class:`SelectorEventLoop` and :class:`ProactorEventLoop`.
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001473
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001474By default asyncio is configured to use :class:`SelectorEventLoop`
Miss Islington (bot)2e0ec5b2019-06-23 17:33:00 -07001475on Unix and :class:`ProactorEventLoop` on Windows.
Andrew Svetlov3d4dbd82018-02-01 19:59:32 +02001476
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001477
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001478.. class:: SelectorEventLoop
1479
1480 An event loop based on the :mod:`selectors` module.
1481
1482 Uses the most efficient *selector* available for the given
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001483 platform. It is also possible to manually configure the
1484 exact selector implementation to be used::
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001485
1486 import asyncio
1487 import selectors
1488
1489 selector = selectors.SelectSelector()
1490 loop = asyncio.SelectorEventLoop(selector)
1491 asyncio.set_event_loop(loop)
Andrew Svetlov7464e872018-01-19 20:04:29 +02001492
1493
Cheryl Sabella2d6097d2018-10-12 10:55:20 -04001494 .. availability:: Unix, Windows.
Andrew Svetlov7464e872018-01-19 20:04:29 +02001495
1496
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001497.. class:: ProactorEventLoop
1498
1499 An event loop for Windows that uses "I/O Completion Ports" (IOCP).
1500
Cheryl Sabella2d6097d2018-10-12 10:55:20 -04001501 .. availability:: Windows.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001502
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001503 .. seealso::
1504
1505 `MSDN documentation on I/O Completion Ports
1506 <https://docs.microsoft.com/en-ca/windows/desktop/FileIO/i-o-completion-ports>`_.
1507
1508
1509.. class:: AbstractEventLoop
1510
1511 Abstract base class for asyncio-compliant event loops.
1512
1513 The :ref:`Event Loop Methods <asyncio-event-loop>` section lists all
1514 methods that an alternative implementation of ``AbstractEventLoop``
1515 should have defined.
1516
1517
1518Examples
1519========
1520
1521Note that all examples in this section **purposefully** show how
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001522to use the low-level event loop APIs, such as :meth:`loop.run_forever`
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001523and :meth:`loop.call_soon`. Modern asyncio applications rarely
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001524need to be written this way; consider using the high-level functions
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001525like :func:`asyncio.run`.
1526
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001527
Yury Selivanov394374e2018-09-17 15:35:24 -04001528.. _asyncio_example_lowlevel_helloworld:
Victor Stinnerea3183f2013-12-03 01:08:00 +01001529
Victor Stinner7f314ed2014-10-15 18:49:16 +02001530Hello World with call_soon()
Victor Stinnera092a612015-01-09 15:58:41 +01001531^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +01001532
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001533An example using the :meth:`loop.call_soon` method to schedule a
1534callback. The callback displays ``"Hello World"`` and then stops the
1535event loop::
Victor Stinnerea3183f2013-12-03 01:08:00 +01001536
1537 import asyncio
1538
Victor Stinner7f314ed2014-10-15 18:49:16 +02001539 def hello_world(loop):
Carol Willing5b7cbd62018-09-12 17:05:17 -07001540 """A callback to print 'Hello World' and stop the event loop"""
Victor Stinnerea3183f2013-12-03 01:08:00 +01001541 print('Hello World')
Victor Stinner7f314ed2014-10-15 18:49:16 +02001542 loop.stop()
Victor Stinnerea3183f2013-12-03 01:08:00 +01001543
1544 loop = asyncio.get_event_loop()
Victor Stinner7f314ed2014-10-15 18:49:16 +02001545
1546 # Schedule a call to hello_world()
1547 loop.call_soon(hello_world, loop)
1548
1549 # Blocking call interrupted by loop.stop()
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001550 try:
1551 loop.run_forever()
1552 finally:
1553 loop.close()
Victor Stinnerea3183f2013-12-03 01:08:00 +01001554
Victor Stinner3e09e322013-12-03 01:22:06 +01001555.. seealso::
Victor Stinnerea3183f2013-12-03 01:08:00 +01001556
Yury Selivanov3faaa882018-09-14 13:32:07 -07001557 A similar :ref:`Hello World <coroutine>`
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001558 example created with a coroutine and the :func:`run` function.
Victor Stinnerea3183f2013-12-03 01:08:00 +01001559
Victor Stinner8b863482014-01-27 10:07:50 +01001560
Yury Selivanov394374e2018-09-17 15:35:24 -04001561.. _asyncio_example_call_later:
Victor Stinner7f314ed2014-10-15 18:49:16 +02001562
1563Display the current date with call_later()
Victor Stinnera092a612015-01-09 15:58:41 +01001564^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinner7f314ed2014-10-15 18:49:16 +02001565
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001566An example of a callback displaying the current date every second. The
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001567callback uses the :meth:`loop.call_later` method to reschedule itself
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001568after 5 seconds, and then stops the event loop::
Victor Stinner7f314ed2014-10-15 18:49:16 +02001569
1570 import asyncio
1571 import datetime
1572
1573 def display_date(end_time, loop):
1574 print(datetime.datetime.now())
1575 if (loop.time() + 1.0) < end_time:
1576 loop.call_later(1, display_date, end_time, loop)
1577 else:
1578 loop.stop()
1579
1580 loop = asyncio.get_event_loop()
1581
1582 # Schedule the first call to display_date()
1583 end_time = loop.time() + 5.0
1584 loop.call_soon(display_date, end_time, loop)
1585
1586 # Blocking call interrupted by loop.stop()
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001587 try:
1588 loop.run_forever()
1589 finally:
1590 loop.close()
Victor Stinner7f314ed2014-10-15 18:49:16 +02001591
1592.. seealso::
1593
Yury Selivanov7372c3b2018-09-14 15:11:24 -07001594 A similar :ref:`current date <asyncio_example_sleep>` example
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001595 created with a coroutine and the :func:`run` function.
Victor Stinner7f314ed2014-10-15 18:49:16 +02001596
1597
Yury Selivanov394374e2018-09-17 15:35:24 -04001598.. _asyncio_example_watch_fd:
Victor Stinner8b863482014-01-27 10:07:50 +01001599
Victor Stinner04e6df32014-10-11 16:16:27 +02001600Watch a file descriptor for read events
Victor Stinnera092a612015-01-09 15:58:41 +01001601^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinner04e6df32014-10-11 16:16:27 +02001602
1603Wait until a file descriptor received some data using the
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001604:meth:`loop.add_reader` method and then close the event loop::
Victor Stinner04e6df32014-10-11 16:16:27 +02001605
1606 import asyncio
Victor Stinnerac577d72017-11-28 21:33:20 +01001607 from socket import socketpair
Victor Stinner04e6df32014-10-11 16:16:27 +02001608
1609 # Create a pair of connected file descriptors
Victor Stinnerccd8e342014-10-11 16:30:02 +02001610 rsock, wsock = socketpair()
Carol Willing5b7cbd62018-09-12 17:05:17 -07001611
Victor Stinner04e6df32014-10-11 16:16:27 +02001612 loop = asyncio.get_event_loop()
1613
1614 def reader():
1615 data = rsock.recv(100)
1616 print("Received:", data.decode())
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001617
Victor Stinner2cef3002014-10-23 22:38:46 +02001618 # We are done: unregister the file descriptor
Victor Stinner04e6df32014-10-11 16:16:27 +02001619 loop.remove_reader(rsock)
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001620
Victor Stinner04e6df32014-10-11 16:16:27 +02001621 # Stop the event loop
1622 loop.stop()
1623
Victor Stinner2cef3002014-10-23 22:38:46 +02001624 # Register the file descriptor for read event
Victor Stinner04e6df32014-10-11 16:16:27 +02001625 loop.add_reader(rsock, reader)
1626
1627 # Simulate the reception of data from the network
1628 loop.call_soon(wsock.send, 'abc'.encode())
1629
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001630 try:
1631 # Run the event loop
1632 loop.run_forever()
1633 finally:
Carol Willing5b7cbd62018-09-12 17:05:17 -07001634 # We are done. Close sockets and the event loop.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001635 rsock.close()
1636 wsock.close()
1637 loop.close()
Victor Stinner04e6df32014-10-11 16:16:27 +02001638
1639.. seealso::
1640
Yury Selivanov394374e2018-09-17 15:35:24 -04001641 * A similar :ref:`example <asyncio_example_create_connection>`
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001642 using transports, protocols, and the
1643 :meth:`loop.create_connection` method.
Victor Stinner04e6df32014-10-11 16:16:27 +02001644
Yury Selivanov394374e2018-09-17 15:35:24 -04001645 * Another similar :ref:`example <asyncio_example_create_connection-streams>`
Yury Selivanov1c19d652019-09-29 22:30:17 -07001646 using the high-level :func:`asyncio.open_connection` function
1647 and streams.
Victor Stinner04e6df32014-10-11 16:16:27 +02001648
1649
Yury Selivanov394374e2018-09-17 15:35:24 -04001650.. _asyncio_example_unix_signals:
1651
Victor Stinner04e6df32014-10-11 16:16:27 +02001652Set signal handlers for SIGINT and SIGTERM
Victor Stinnera092a612015-01-09 15:58:41 +01001653^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinner04e6df32014-10-11 16:16:27 +02001654
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001655(This ``signals`` example only works on Unix.)
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001656
1657Register handlers for signals :py:data:`SIGINT` and :py:data:`SIGTERM`
1658using the :meth:`loop.add_signal_handler` method::
Victor Stinner8b863482014-01-27 10:07:50 +01001659
1660 import asyncio
1661 import functools
1662 import os
1663 import signal
1664
Alexander Vasinceb842e2019-05-03 18:25:36 +03001665 def ask_exit(signame, loop):
Victor Stinner8b863482014-01-27 10:07:50 +01001666 print("got signal %s: exit" % signame)
1667 loop.stop()
1668
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001669 async def main():
1670 loop = asyncio.get_running_loop()
Victor Stinner8b863482014-01-27 10:07:50 +01001671
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001672 for signame in {'SIGINT', 'SIGTERM'}:
1673 loop.add_signal_handler(
1674 getattr(signal, signame),
Alexander Vasinceb842e2019-05-03 18:25:36 +03001675 functools.partial(ask_exit, signame, loop))
Victor Stinner2cef3002014-10-23 22:38:46 +02001676
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001677 await asyncio.sleep(3600)
1678
1679 print("Event loop running for 1 hour, press Ctrl+C to interrupt.")
1680 print(f"pid {os.getpid()}: send SIGINT or SIGTERM to exit.")
1681
1682 asyncio.run(main())