blob: ee995e04e47650975c9fd5be6d34376c03591e33 [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
Kyle Stanleyf9000642019-10-10 19:18:46 -04008**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
Kyle Stanley9fdc64c2019-09-19 08:47:22 -0400174.. coroutinemethod:: loop.shutdown_default_executor()
175
176 Schedule the closure of the default executor and wait for it to join all of
177 the threads in the :class:`ThreadPoolExecutor`. After calling this method, a
178 :exc:`RuntimeError` will be raised if :meth:`loop.run_in_executor` is called
179 while using the default executor.
180
181 Note that there is no need to call this function when
182 :func:`asyncio.run` is used.
183
184 .. versionadded:: 3.9
185
Yury Selivanov03660042016-12-15 17:36:05 -0500186
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700187Scheduling callbacks
188^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +0100189
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700190.. method:: loop.call_soon(callback, *args, context=None)
Victor Stinner8464c242014-11-28 13:15:41 +0100191
Carol Willing5b7cbd62018-09-12 17:05:17 -0700192 Schedule a *callback* to be called with *args* arguments at
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700193 the next iteration of the event loop.
Victor Stinner8464c242014-11-28 13:15:41 +0100194
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700195 Callbacks are called in the order in which they are registered.
196 Each callback will be called exactly once.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100197
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700198 An optional keyword-only *context* argument allows specifying a
199 custom :class:`contextvars.Context` for the *callback* to run in.
200 The current context is used when no *context* is provided.
Yury Selivanov28b91782018-05-23 13:35:04 -0400201
Yury Selivanov1096f762015-06-25 13:49:52 -0400202 An instance of :class:`asyncio.Handle` is returned, which can be
Carol Willing5b7cbd62018-09-12 17:05:17 -0700203 used later to cancel the callback.
204
205 This method is not thread-safe.
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500206
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700207.. method:: loop.call_soon_threadsafe(callback, *args, context=None)
Victor Stinner8464c242014-11-28 13:15:41 +0100208
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700209 A thread-safe variant of :meth:`call_soon`. Must be used to
210 schedule callbacks *from another thread*.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100211
Victor Stinner83704962015-02-25 14:24:15 +0100212 See the :ref:`concurrency and multithreading <asyncio-multithreading>`
213 section of the documentation.
214
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700215.. versionchanged:: 3.7
216 The *context* keyword-only parameter was added. See :pep:`567`
217 for more details.
218
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400219.. _asyncio-pass-keywords:
220
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700221.. note::
222
Carol Willing5b7cbd62018-09-12 17:05:17 -0700223 Most :mod:`asyncio` scheduling functions don't allow passing
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400224 keyword arguments. To do that, use :func:`functools.partial`::
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700225
Carol Willing5b7cbd62018-09-12 17:05:17 -0700226 # will schedule "print("Hello", flush=True)"
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700227 loop.call_soon(
228 functools.partial(print, "Hello", flush=True))
229
230 Using partial objects is usually more convenient than using lambdas,
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400231 as asyncio can render partial objects better in debug and error
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700232 messages.
Yury Selivanov28b91782018-05-23 13:35:04 -0400233
Victor Stinnerea3183f2013-12-03 01:08:00 +0100234
Victor Stinner45b27ed2014-02-01 02:36:43 +0100235.. _asyncio-delayed-calls:
236
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700237Scheduling delayed callbacks
238^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +0100239
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700240Event loop provides mechanisms to schedule callback functions
241to be called at some point in the future. Event loop uses monotonic
242clocks to track time.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100243
Victor Stinner45b27ed2014-02-01 02:36:43 +0100244
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700245.. method:: loop.call_later(delay, callback, *args, context=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100246
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700247 Schedule *callback* to be called after the given *delay*
248 number of seconds (can be either an int or a float).
Victor Stinnerea3183f2013-12-03 01:08:00 +0100249
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700250 An instance of :class:`asyncio.TimerHandle` is returned which can
251 be used to cancel the callback.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100252
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700253 *callback* will be called exactly once. If two callbacks are
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400254 scheduled for exactly the same time, the order in which they
255 are called is undefined.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100256
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700257 The optional positional *args* will be passed to the callback when
258 it is called. If you want the callback to be called with keyword
259 arguments use :func:`functools.partial`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100260
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700261 An optional keyword-only *context* argument allows specifying a
262 custom :class:`contextvars.Context` for the *callback* to run in.
263 The current context is used when no *context* is provided.
Victor Stinner8464c242014-11-28 13:15:41 +0100264
Yury Selivanov28b91782018-05-23 13:35:04 -0400265 .. versionchanged:: 3.7
266 The *context* keyword-only parameter was added. See :pep:`567`
267 for more details.
268
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400269 .. versionchanged:: 3.8
270 In Python 3.7 and earlier with the default event loop implementation,
271 the *delay* could not exceed one day.
272 This has been fixed in Python 3.8.
273
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700274.. method:: loop.call_at(when, callback, *args, context=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100275
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700276 Schedule *callback* to be called at the given absolute timestamp
277 *when* (an int or a float), using the same time reference as
278 :meth:`loop.time`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100279
280 This method's behavior is the same as :meth:`call_later`.
281
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700282 An instance of :class:`asyncio.TimerHandle` is returned which can
283 be used to cancel the callback.
Victor Stinner8464c242014-11-28 13:15:41 +0100284
Yury Selivanov28b91782018-05-23 13:35:04 -0400285 .. versionchanged:: 3.7
286 The *context* keyword-only parameter was added. See :pep:`567`
287 for more details.
288
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400289 .. versionchanged:: 3.8
290 In Python 3.7 and earlier with the default event loop implementation,
291 the difference between *when* and the current time could not exceed
292 one day. This has been fixed in Python 3.8.
293
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700294.. method:: loop.time()
Victor Stinnerea3183f2013-12-03 01:08:00 +0100295
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700296 Return the current time, as a :class:`float` value, according to
297 the event loop's internal monotonic clock.
298
299.. note::
Enrico Alarico Carbognani7e954e72019-04-18 14:43:14 +0200300 .. versionchanged:: 3.8
301 In Python 3.7 and earlier timeouts (relative *delay* or absolute *when*)
302 should not exceed one day. This has been fixed in Python 3.8.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100303
Victor Stinner3e09e322013-12-03 01:22:06 +0100304.. seealso::
305
306 The :func:`asyncio.sleep` function.
307
Victor Stinnerea3183f2013-12-03 01:08:00 +0100308
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700309Creating Futures and Tasks
310^^^^^^^^^^^^^^^^^^^^^^^^^^
Yury Selivanov950204d2016-05-16 16:23:00 -0400311
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700312.. method:: loop.create_future()
Yury Selivanov950204d2016-05-16 16:23:00 -0400313
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700314 Create an :class:`asyncio.Future` object attached to the event loop.
Yury Selivanov950204d2016-05-16 16:23:00 -0400315
Carol Willing5b7cbd62018-09-12 17:05:17 -0700316 This is the preferred way to create Futures in asyncio. This lets
317 third-party event loops provide alternative implementations of
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700318 the Future object (with better performance or instrumentation).
Yury Selivanov950204d2016-05-16 16:23:00 -0400319
320 .. versionadded:: 3.5.2
321
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700322.. method:: loop.create_task(coro, \*, name=None)
Yury Selivanov950204d2016-05-16 16:23:00 -0400323
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700324 Schedule the execution of a :ref:`coroutine`.
325 Return a :class:`Task` object.
Victor Stinner530ef2f2014-07-08 12:39:10 +0200326
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700327 Third-party event loops can use their own subclass of :class:`Task`
328 for interoperability. In this case, the result type is a subclass
329 of :class:`Task`.
Victor Stinner530ef2f2014-07-08 12:39:10 +0200330
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700331 If the *name* argument is provided and not ``None``, it is set as
332 the name of the task using :meth:`Task.set_name`.
Victor Stinner530ef2f2014-07-08 12:39:10 +0200333
Alex Grönholmcca4eec2018-08-09 00:06:47 +0300334 .. versionchanged:: 3.8
335 Added the ``name`` parameter.
336
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700337.. method:: loop.set_task_factory(factory)
Yury Selivanov71854612015-05-11 16:28:27 -0400338
339 Set a task factory that will be used by
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700340 :meth:`loop.create_task`.
Yury Selivanov71854612015-05-11 16:28:27 -0400341
342 If *factory* is ``None`` the default task factory will be set.
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400343 Otherwise, *factory* must be a *callable* with the signature matching
344 ``(loop, coro)``, where *loop* is a reference to the active
345 event loop, and *coro* is a coroutine object. The callable
346 must return a :class:`asyncio.Future`-compatible object.
Yury Selivanov71854612015-05-11 16:28:27 -0400347
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700348.. method:: loop.get_task_factory()
Yury Selivanov71854612015-05-11 16:28:27 -0400349
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700350 Return a task factory or ``None`` if the default one is in use.
Yury Selivanov71854612015-05-11 16:28:27 -0400351
Victor Stinner530ef2f2014-07-08 12:39:10 +0200352
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700353Opening network connections
354^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +0100355
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700356.. coroutinemethod:: loop.create_connection(protocol_factory, \
357 host=None, port=None, \*, ssl=None, \
358 family=0, proto=0, flags=0, sock=None, \
359 local_addr=None, server_hostname=None, \
360 ssl_handshake_timeout=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100361
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700362 Open a streaming transport connection to a given
363 address specified by *host* and *port*.
364
365 The socket family can be either :py:data:`~socket.AF_INET` or
366 :py:data:`~socket.AF_INET6` depending on *host* (or the *family*
367 argument, if provided).
368
369 The socket type will be :py:data:`~socket.SOCK_STREAM`.
370
371 *protocol_factory* must be a callable returning an
372 :ref:`asyncio protocol <asyncio-protocol>` implementation.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100373
Yury Selivanov19a44f62017-12-14 20:53:26 -0500374 This method will try to establish the connection in the background.
375 When successful, it returns a ``(transport, protocol)`` pair.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100376
377 The chronological synopsis of the underlying operation is as follows:
378
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700379 #. The connection is established and a :ref:`transport <asyncio-transport>`
380 is created for it.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100381
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700382 #. *protocol_factory* is called without arguments and is expected to
383 return a :ref:`protocol <asyncio-protocol>` instance.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100384
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700385 #. The protocol instance is coupled with the transport by calling its
386 :meth:`~BaseProtocol.connection_made` method.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100387
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700388 #. A ``(transport, protocol)`` tuple is returned on success.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100389
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700390 The created transport is an implementation-dependent bidirectional
391 stream.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100392
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700393 Other arguments:
Victor Stinnerea3183f2013-12-03 01:08:00 +0100394
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400395 * *ssl*: if given and not false, a SSL/TLS transport is created
Victor Stinnerea3183f2013-12-03 01:08:00 +0100396 (by default a plain TCP transport is created). If *ssl* is
397 a :class:`ssl.SSLContext` object, this context is used to create
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400398 the transport; if *ssl* is :const:`True`, a default context returned
399 from :func:`ssl.create_default_context` is used.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100400
Berker Peksag9c1dba22014-09-28 00:00:58 +0300401 .. seealso:: :ref:`SSL/TLS security considerations <ssl-security>`
Antoine Pitrouc5e075f2014-03-22 18:19:11 +0100402
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400403 * *server_hostname* sets or overrides the hostname that the target
404 server's certificate will be matched against. Should only be passed
405 if *ssl* is not ``None``. By default the value of the *host* argument
Victor Stinnerea3183f2013-12-03 01:08:00 +0100406 is used. If *host* is empty, there is no default and you must pass a
407 value for *server_hostname*. If *server_hostname* is an empty
408 string, hostname matching is disabled (which is a serious security
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400409 risk, allowing for potential man-in-the-middle attacks).
Victor Stinnerea3183f2013-12-03 01:08:00 +0100410
411 * *family*, *proto*, *flags* are the optional address family, protocol
412 and flags to be passed through to getaddrinfo() for *host* resolution.
413 If given, these should all be integers from the corresponding
414 :mod:`socket` module constants.
415
twisteroid ambassador88f07a82019-05-05 19:14:35 +0800416 * *happy_eyeballs_delay*, if given, enables Happy Eyeballs for this
417 connection. It should
418 be a floating-point number representing the amount of time in seconds
419 to wait for a connection attempt to complete, before starting the next
420 attempt in parallel. This is the "Connection Attempt Delay" as defined
421 in :rfc:`8305`. A sensible default value recommended by the RFC is ``0.25``
422 (250 milliseconds).
423
424 * *interleave* controls address reordering when a host name resolves to
425 multiple IP addresses.
426 If ``0`` or unspecified, no reordering is done, and addresses are
427 tried in the order returned by :meth:`getaddrinfo`. If a positive integer
428 is specified, the addresses are interleaved by address family, and the
429 given integer is interpreted as "First Address Family Count" as defined
430 in :rfc:`8305`. The default is ``0`` if *happy_eyeballs_delay* is not
431 specified, and ``1`` if it is.
432
Victor Stinnerea3183f2013-12-03 01:08:00 +0100433 * *sock*, if given, should be an existing, already connected
434 :class:`socket.socket` object to be used by the transport.
twisteroid ambassador88f07a82019-05-05 19:14:35 +0800435 If *sock* is given, none of *host*, *port*, *family*, *proto*, *flags*,
436 *happy_eyeballs_delay*, *interleave*
Victor Stinnerea3183f2013-12-03 01:08:00 +0100437 and *local_addr* should be specified.
438
439 * *local_addr*, if given, is a ``(local_host, local_port)`` tuple used
440 to bind the socket to locally. The *local_host* and *local_port*
Carol Willing5b7cbd62018-09-12 17:05:17 -0700441 are looked up using ``getaddrinfo()``, similarly to *host* and *port*.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100442
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400443 * *ssl_handshake_timeout* is (for a TLS connection) the time in seconds
444 to wait for the TLS handshake to complete before aborting the connection.
Yury Selivanov96026432018-06-04 11:32:35 -0400445 ``60.0`` seconds if ``None`` (default).
Neil Aspinallf7686c12017-12-19 19:45:42 +0000446
twisteroid ambassador88f07a82019-05-05 19:14:35 +0800447 .. versionadded:: 3.8
448
449 The *happy_eyeballs_delay* and *interleave* parameters.
450
Neil Aspinallf7686c12017-12-19 19:45:42 +0000451 .. versionadded:: 3.7
452
453 The *ssl_handshake_timeout* parameter.
454
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700455 .. versionchanged:: 3.6
456
457 The socket option :py:data:`~socket.TCP_NODELAY` is set by default
458 for all TCP connections.
459
Victor Stinner60208a12015-09-15 22:41:52 +0200460 .. versionchanged:: 3.5
461
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400462 Added support for SSL/TLS in :class:`ProactorEventLoop`.
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200463
Victor Stinnerc8ea8132014-01-23 11:02:09 +0100464 .. seealso::
465
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700466 The :func:`open_connection` function is a high-level alternative
467 API. It returns a pair of (:class:`StreamReader`, :class:`StreamWriter`)
468 that can be used directly in async/await code.
Victor Stinnerc8ea8132014-01-23 11:02:09 +0100469
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700470.. coroutinemethod:: loop.create_datagram_endpoint(protocol_factory, \
471 local_addr=None, remote_addr=None, \*, \
472 family=0, proto=0, flags=0, \
473 reuse_address=None, reuse_port=None, \
474 allow_broadcast=None, sock=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100475
Kyle Stanleyab513a32019-12-09 09:21:10 -0500476 .. note::
477 The parameter *reuse_address* is no longer supported, as using
478 :py:data:`~sockets.SO_REUSEADDR` poses a significant security concern for
479 UDP. Explicitly passing ``reuse_address=True`` will raise an exception.
480
481 When multiple processes with differing UIDs assign sockets to an
Jesús Ceab0d49492019-12-20 03:21:03 +0100482 identical UDP socket address with ``SO_REUSEADDR``, incoming packets can
Kyle Stanleyab513a32019-12-09 09:21:10 -0500483 become randomly distributed among the sockets.
484
485 For supported platforms, *reuse_port* can be used as a replacement for
486 similar functionality. With *reuse_port*,
487 :py:data:`~sockets.SO_REUSEPORT` is used instead, which specifically
488 prevents processes with differing UIDs from assigning sockets to the same
489 socket address.
490
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700491 Create a datagram connection.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100492
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700493 The socket family can be either :py:data:`~socket.AF_INET`,
494 :py:data:`~socket.AF_INET6`, or :py:data:`~socket.AF_UNIX`,
495 depending on *host* (or the *family* argument, if provided).
Victor Stinnera6919aa2014-02-19 13:32:34 +0100496
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700497 The socket type will be :py:data:`~socket.SOCK_DGRAM`.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100498
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700499 *protocol_factory* must be a callable returning a
500 :ref:`protocol <asyncio-protocol>` implementation.
501
502 A tuple of ``(transport, protocol)`` is returned on success.
503
504 Other arguments:
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700505
506 * *local_addr*, if given, is a ``(local_host, local_port)`` tuple used
507 to bind the socket to locally. The *local_host* and *local_port*
508 are looked up using :meth:`getaddrinfo`.
509
510 * *remote_addr*, if given, is a ``(remote_host, remote_port)`` tuple used
511 to connect the socket to a remote address. The *remote_host* and
512 *remote_port* are looked up using :meth:`getaddrinfo`.
513
514 * *family*, *proto*, *flags* are the optional address family, protocol
515 and flags to be passed through to :meth:`getaddrinfo` for *host*
516 resolution. If given, these should all be integers from the
517 corresponding :mod:`socket` module constants.
518
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700519 * *reuse_port* tells the kernel to allow this endpoint to be bound to the
520 same port as other existing endpoints are bound to, so long as they all
521 set this flag when being created. This option is not supported on Windows
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400522 and some Unixes. If the :py:data:`~socket.SO_REUSEPORT` constant is not
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700523 defined then this capability is unsupported.
524
525 * *allow_broadcast* tells the kernel to allow this endpoint to send
526 messages to the broadcast address.
527
528 * *sock* can optionally be specified in order to use a preexisting,
529 already connected, :class:`socket.socket` object to be used by the
530 transport. If specified, *local_addr* and *remote_addr* should be omitted
531 (must be :const:`None`).
Victor Stinnera6919aa2014-02-19 13:32:34 +0100532
Victor Stinnerc7edffd2014-10-12 11:24:26 +0200533 See :ref:`UDP echo client protocol <asyncio-udp-echo-client-protocol>` and
534 :ref:`UDP echo server protocol <asyncio-udp-echo-server-protocol>` examples.
535
Romuald Brunet0ded5802018-05-14 18:22:00 +0200536 .. versionchanged:: 3.4.4
537 The *family*, *proto*, *flags*, *reuse_address*, *reuse_port,
538 *allow_broadcast*, and *sock* parameters were added.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100539
Kyle Stanleyab513a32019-12-09 09:21:10 -0500540 .. versionchanged:: 3.8.1
541 The *reuse_address* parameter is no longer supported due to security
542 concerns.
543
Andrew Svetlovbafd4b52019-05-28 12:52:15 +0300544 .. versionchanged:: 3.8
545 Added support for Windows.
546
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700547.. coroutinemethod:: loop.create_unix_connection(protocol_factory, \
548 path=None, \*, ssl=None, sock=None, \
549 server_hostname=None, ssl_handshake_timeout=None)
Victor Stinnera6919aa2014-02-19 13:32:34 +0100550
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400551 Create a Unix connection.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100552
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700553 The socket family will be :py:data:`~socket.AF_UNIX`; socket
554 type will be :py:data:`~socket.SOCK_STREAM`.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100555
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700556 A tuple of ``(transport, protocol)`` is returned on success.
Guido van Rossum9e80eeb2016-11-03 14:17:25 -0700557
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400558 *path* is the name of a Unix domain socket and is required,
559 unless a *sock* parameter is specified. Abstract Unix sockets,
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700560 :class:`str`, :class:`bytes`, and :class:`~pathlib.Path` paths are
561 supported.
562
563 See the documentation of the :meth:`loop.create_connection` method
564 for information about arguments to this method.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100565
Cheryl Sabella2d6097d2018-10-12 10:55:20 -0400566 .. availability:: Unix.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100567
Neil Aspinallf7686c12017-12-19 19:45:42 +0000568 .. versionadded:: 3.7
569
570 The *ssl_handshake_timeout* parameter.
571
Yury Selivanov423fd362017-11-20 17:26:28 -0500572 .. versionchanged:: 3.7
573
Elvis Pranskevichusc0d062f2018-06-08 11:36:00 -0400574 The *path* parameter can now be a :term:`path-like object`.
Yury Selivanov423fd362017-11-20 17:26:28 -0500575
Victor Stinnera6919aa2014-02-19 13:32:34 +0100576
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700577Creating network servers
578^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +0100579
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700580.. coroutinemethod:: loop.create_server(protocol_factory, \
581 host=None, port=None, \*, \
582 family=socket.AF_UNSPEC, \
583 flags=socket.AI_PASSIVE, \
584 sock=None, backlog=100, ssl=None, \
585 reuse_address=None, reuse_port=None, \
586 ssl_handshake_timeout=None, start_serving=True)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100587
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700588 Create a TCP server (socket type :data:`~socket.SOCK_STREAM`) listening
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400589 on *port* of the *host* address.
Victor Stinner33f6abe2014-10-12 20:36:04 +0200590
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700591 Returns a :class:`Server` object.
Victor Stinner33f6abe2014-10-12 20:36:04 +0200592
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700593 Arguments:
Victor Stinner33f6abe2014-10-12 20:36:04 +0200594
Bumsik Kim5cc583d2018-09-16 19:40:44 -0400595 * *protocol_factory* must be a callable returning a
596 :ref:`protocol <asyncio-protocol>` implementation.
597
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400598 * The *host* parameter can be set to several types which determine where
599 the server would be listening:
600
601 - If *host* is a string, the TCP server is bound to a single network
602 interface specified by *host*.
603
604 - If *host* is a sequence of strings, the TCP server is bound to all
605 network interfaces specified by the sequence.
606
607 - If *host* is an empty string or ``None``, all interfaces are
608 assumed and a list of multiple sockets will be returned (most likely
609 one for IPv4 and another one for IPv6).
Victor Stinner33f6abe2014-10-12 20:36:04 +0200610
611 * *family* can be set to either :data:`socket.AF_INET` or
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700612 :data:`~socket.AF_INET6` to force the socket to use IPv4 or IPv6.
Carol Willing5b7cbd62018-09-12 17:05:17 -0700613 If not set, the *family* will be determined from host name
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700614 (defaults to :data:`~socket.AF_UNSPEC`).
Victor Stinner33f6abe2014-10-12 20:36:04 +0200615
616 * *flags* is a bitmask for :meth:`getaddrinfo`.
617
618 * *sock* can optionally be specified in order to use a preexisting
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400619 socket object. If specified, *host* and *port* must not be specified.
Victor Stinner33f6abe2014-10-12 20:36:04 +0200620
621 * *backlog* is the maximum number of queued connections passed to
622 :meth:`~socket.socket.listen` (defaults to 100).
623
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400624 * *ssl* can be set to an :class:`~ssl.SSLContext` instance to enable
625 TLS over the accepted connections.
Victor Stinner33f6abe2014-10-12 20:36:04 +0200626
627 * *reuse_address* tells the kernel to reuse a local socket in
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700628 ``TIME_WAIT`` state, without waiting for its natural timeout to
Serhiy Storchaka4adf01c2016-10-19 18:30:05 +0300629 expire. If not specified will automatically be set to ``True`` on
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400630 Unix.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100631
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700632 * *reuse_port* tells the kernel to allow this endpoint to be bound to the
633 same port as other existing endpoints are bound to, so long as they all
634 set this flag when being created. This option is not supported on
635 Windows.
636
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400637 * *ssl_handshake_timeout* is (for a TLS server) the time in seconds to wait
638 for the TLS handshake to complete before aborting the connection.
Yury Selivanov96026432018-06-04 11:32:35 -0400639 ``60.0`` seconds if ``None`` (default).
Neil Aspinallf7686c12017-12-19 19:45:42 +0000640
Yury Selivanovc9070d02018-01-25 18:08:09 -0500641 * *start_serving* set to ``True`` (the default) causes the created server
642 to start accepting connections immediately. When set to ``False``,
643 the user should await on :meth:`Server.start_serving` or
644 :meth:`Server.serve_forever` to make the server to start accepting
645 connections.
646
Neil Aspinallf7686c12017-12-19 19:45:42 +0000647 .. versionadded:: 3.7
648
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700649 Added *ssl_handshake_timeout* and *start_serving* parameters.
650
651 .. versionchanged:: 3.6
652
653 The socket option :py:data:`~socket.TCP_NODELAY` is set by default
654 for all TCP connections.
Neil Aspinallf7686c12017-12-19 19:45:42 +0000655
Victor Stinner60208a12015-09-15 22:41:52 +0200656 .. versionchanged:: 3.5
657
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400658 Added support for SSL/TLS in :class:`ProactorEventLoop`.
Victor Stinnerc8ea8132014-01-23 11:02:09 +0100659
Victor Stinner7b58a2b2015-09-21 18:41:05 +0200660 .. versionchanged:: 3.5.1
Victor Stinner5e4a7d82015-09-21 18:33:43 +0200661
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700662 The *host* parameter can be a sequence of strings.
663
664 .. seealso::
665
666 The :func:`start_server` function is a higher-level alternative API
667 that returns a pair of :class:`StreamReader` and :class:`StreamWriter`
668 that can be used in an async/await code.
Victor Stinner5e4a7d82015-09-21 18:33:43 +0200669
Victor Stinnerea3183f2013-12-03 01:08:00 +0100670
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700671.. coroutinemethod:: loop.create_unix_server(protocol_factory, path=None, \
672 \*, sock=None, backlog=100, ssl=None, \
673 ssl_handshake_timeout=None, start_serving=True)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100674
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700675 Similar to :meth:`loop.create_server` but works with the
676 :py:data:`~socket.AF_UNIX` socket family.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100677
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400678 *path* is the name of a Unix domain socket, and is required,
679 unless a *sock* argument is provided. Abstract Unix sockets,
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700680 :class:`str`, :class:`bytes`, and :class:`~pathlib.Path` paths
681 are supported.
Yury Selivanov423fd362017-11-20 17:26:28 -0500682
Bumsik Kim5cc583d2018-09-16 19:40:44 -0400683 See the documentation of the :meth:`loop.create_server` method
684 for information about arguments to this method.
685
Cheryl Sabella2d6097d2018-10-12 10:55:20 -0400686 .. availability:: Unix.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100687
Neil Aspinallf7686c12017-12-19 19:45:42 +0000688 .. versionadded:: 3.7
689
Elvis Pranskevichusc0d062f2018-06-08 11:36:00 -0400690 The *ssl_handshake_timeout* and *start_serving* parameters.
Neil Aspinallf7686c12017-12-19 19:45:42 +0000691
Yury Selivanov423fd362017-11-20 17:26:28 -0500692 .. versionchanged:: 3.7
693
694 The *path* parameter can now be a :class:`~pathlib.Path` object.
695
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700696.. coroutinemethod:: loop.connect_accepted_socket(protocol_factory, \
697 sock, \*, ssl=None, ssl_handshake_timeout=None)
Yury Selivanov3b3a1412016-11-07 15:35:25 -0500698
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700699 Wrap an already accepted connection into a transport/protocol pair.
Yury Selivanov3b3a1412016-11-07 15:35:25 -0500700
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700701 This method can be used by servers that accept connections outside
702 of asyncio but that use asyncio to handle them.
Yury Selivanov3b3a1412016-11-07 15:35:25 -0500703
704 Parameters:
705
Bumsik Kim5cc583d2018-09-16 19:40:44 -0400706 * *protocol_factory* must be a callable returning a
707 :ref:`protocol <asyncio-protocol>` implementation.
708
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700709 * *sock* is a preexisting socket object returned from
710 :meth:`socket.accept <socket.socket.accept>`.
Yury Selivanov3b3a1412016-11-07 15:35:25 -0500711
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700712 * *ssl* can be set to an :class:`~ssl.SSLContext` to enable SSL over
713 the accepted connections.
Yury Selivanov3b3a1412016-11-07 15:35:25 -0500714
Neil Aspinallf7686c12017-12-19 19:45:42 +0000715 * *ssl_handshake_timeout* is (for an SSL connection) the time in seconds to
716 wait for the SSL handshake to complete before aborting the connection.
Yury Selivanov96026432018-06-04 11:32:35 -0400717 ``60.0`` seconds if ``None`` (default).
Neil Aspinallf7686c12017-12-19 19:45:42 +0000718
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700719 Returns a ``(transport, protocol)`` pair.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100720
Neil Aspinallf7686c12017-12-19 19:45:42 +0000721 .. versionadded:: 3.7
722
723 The *ssl_handshake_timeout* parameter.
724
AraHaan431665b2017-11-21 11:06:26 -0500725 .. versionadded:: 3.5.3
726
727
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700728Transferring files
729^^^^^^^^^^^^^^^^^^
Andrew Svetlov7c684072018-01-27 21:22:47 +0200730
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700731.. coroutinemethod:: loop.sendfile(transport, file, \
732 offset=0, count=None, *, fallback=True)
Andrew Svetlov7c684072018-01-27 21:22:47 +0200733
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700734 Send a *file* over a *transport*. Return the total number of bytes
735 sent.
Andrew Svetlov7c684072018-01-27 21:22:47 +0200736
737 The method uses high-performance :meth:`os.sendfile` if available.
738
739 *file* must be a regular file object opened in binary mode.
740
741 *offset* tells from where to start reading the file. If specified,
742 *count* is the total number of bytes to transmit as opposed to
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400743 sending the file until EOF is reached. File position is always updated,
744 even when this method raises an error, and
745 :meth:`file.tell() <io.IOBase.tell>` can be used to obtain the actual
746 number of bytes sent.
Andrew Svetlov7c684072018-01-27 21:22:47 +0200747
748 *fallback* set to ``True`` makes asyncio to manually read and send
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700749 the file when the platform does not support the sendfile system call
Andrew Svetlov7c684072018-01-27 21:22:47 +0200750 (e.g. Windows or SSL socket on Unix).
751
752 Raise :exc:`SendfileNotAvailableError` if the system does not support
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400753 the *sendfile* syscall and *fallback* is ``False``.
Andrew Svetlov7c684072018-01-27 21:22:47 +0200754
755 .. versionadded:: 3.7
756
757
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500758TLS Upgrade
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700759^^^^^^^^^^^
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500760
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700761.. coroutinemethod:: loop.start_tls(transport, protocol, \
762 sslcontext, \*, server_side=False, \
763 server_hostname=None, ssl_handshake_timeout=None)
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500764
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700765 Upgrade an existing transport-based connection to TLS.
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500766
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700767 Return a new transport instance, that the *protocol* must start using
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500768 immediately after the *await*. The *transport* instance passed to
769 the *start_tls* method should never be used again.
770
771 Parameters:
772
773 * *transport* and *protocol* instances that methods like
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700774 :meth:`~loop.create_server` and
775 :meth:`~loop.create_connection` return.
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500776
777 * *sslcontext*: a configured instance of :class:`~ssl.SSLContext`.
778
779 * *server_side* pass ``True`` when a server-side connection is being
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700780 upgraded (like the one created by :meth:`~loop.create_server`).
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500781
782 * *server_hostname*: sets or overrides the host name that the target
783 server's certificate will be matched against.
784
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400785 * *ssl_handshake_timeout* is (for a TLS connection) the time in seconds to
786 wait for the TLS handshake to complete before aborting the connection.
Yury Selivanov96026432018-06-04 11:32:35 -0400787 ``60.0`` seconds if ``None`` (default).
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500788
789 .. versionadded:: 3.7
790
791
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700792Watching file descriptors
793^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerc1567df2014-02-08 23:22:58 +0100794
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700795.. method:: loop.add_reader(fd, callback, \*args)
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200796
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400797 Start monitoring the *fd* file descriptor for read availability and
798 invoke *callback* with the specified arguments once *fd* is available for
799 reading.
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200800
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700801.. method:: loop.remove_reader(fd)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100802
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400803 Stop monitoring the *fd* file descriptor for read availability.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100804
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700805.. method:: loop.add_writer(fd, callback, \*args)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100806
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400807 Start monitoring the *fd* file descriptor for write availability and
808 invoke *callback* with the specified arguments once *fd* is available for
809 writing.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100810
Yury Selivanove247b462018-09-20 12:43:59 -0400811 Use :func:`functools.partial` :ref:`to pass keyword arguments
Naglis17473342018-12-04 09:31:15 +0200812 <asyncio-pass-keywords>` to *callback*.
Victor Stinner8464c242014-11-28 13:15:41 +0100813
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700814.. method:: loop.remove_writer(fd)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100815
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400816 Stop monitoring the *fd* file descriptor for write availability.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100817
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700818See also :ref:`Platform Support <asyncio-platform-support>` section
819for some limitations of these methods.
Victor Stinner04e6df32014-10-11 16:16:27 +0200820
Victor Stinnerc1567df2014-02-08 23:22:58 +0100821
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700822Working with socket objects directly
823^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerc1567df2014-02-08 23:22:58 +0100824
Carol Willing5b7cbd62018-09-12 17:05:17 -0700825In general, protocol implementations that use transport-based APIs
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700826such as :meth:`loop.create_connection` and :meth:`loop.create_server`
827are faster than implementations that work with sockets directly.
Carol Willing5b7cbd62018-09-12 17:05:17 -0700828However, there are some use cases when performance is not critical, and
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700829working with :class:`~socket.socket` objects directly is more
830convenient.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100831
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700832.. coroutinemethod:: loop.sock_recv(sock, nbytes)
Yury Selivanov55c50842016-06-08 12:48:15 -0400833
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400834 Receive up to *nbytes* from *sock*. Asynchronous version of
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700835 :meth:`socket.recv() <socket.socket.recv>`.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100836
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400837 Return the received data as a bytes object.
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700838
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400839 *sock* must be a non-blocking socket.
Victor Stinnerec2ce092014-07-29 23:12:22 +0200840
Yury Selivanov19a44f62017-12-14 20:53:26 -0500841 .. versionchanged:: 3.7
Carol Willing5b7cbd62018-09-12 17:05:17 -0700842 Even though this method was always documented as a coroutine
843 method, releases before Python 3.7 returned a :class:`Future`.
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700844 Since Python 3.7 this is an ``async def`` method.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100845
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700846.. coroutinemethod:: loop.sock_recv_into(sock, buf)
Antoine Pitrou525f40d2017-10-19 21:46:40 +0200847
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400848 Receive data from *sock* into the *buf* buffer. Modeled after the blocking
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700849 :meth:`socket.recv_into() <socket.socket.recv_into>` method.
Antoine Pitrou525f40d2017-10-19 21:46:40 +0200850
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700851 Return the number of bytes written to the buffer.
Antoine Pitrou525f40d2017-10-19 21:46:40 +0200852
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400853 *sock* must be a non-blocking socket.
Antoine Pitrou525f40d2017-10-19 21:46:40 +0200854
Antoine Pitrou525f40d2017-10-19 21:46:40 +0200855 .. versionadded:: 3.7
856
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700857.. coroutinemethod:: loop.sock_sendall(sock, data)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100858
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400859 Send *data* to the *sock* socket. Asynchronous version of
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700860 :meth:`socket.sendall() <socket.socket.sendall>`.
Yury Selivanov55c50842016-06-08 12:48:15 -0400861
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400862 This method continues to send to the socket until either all data
863 in *data* has been sent or an error occurs. ``None`` is returned
Carol Willing5b7cbd62018-09-12 17:05:17 -0700864 on success. On error, an exception is raised. Additionally, there is no way
865 to determine how much data, if any, was successfully processed by the
866 receiving end of the connection.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100867
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400868 *sock* must be a non-blocking socket.
Victor Stinnerec2ce092014-07-29 23:12:22 +0200869
Yury Selivanov19a44f62017-12-14 20:53:26 -0500870 .. versionchanged:: 3.7
871 Even though the method was always documented as a coroutine
872 method, before Python 3.7 it returned an :class:`Future`.
873 Since Python 3.7, this is an ``async def`` method.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100874
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700875.. coroutinemethod:: loop.sock_connect(sock, address)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100876
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400877 Connect *sock* to a remote socket at *address*.
Victor Stinner1b0580b2014-02-13 09:24:37 +0100878
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700879 Asynchronous version of :meth:`socket.connect() <socket.socket.connect>`.
880
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400881 *sock* must be a non-blocking socket.
Victor Stinnerec2ce092014-07-29 23:12:22 +0200882
Yury Selivanov55c50842016-06-08 12:48:15 -0400883 .. versionchanged:: 3.5.2
884 ``address`` no longer needs to be resolved. ``sock_connect``
885 will try to check if the *address* is already resolved by calling
886 :func:`socket.inet_pton`. If not,
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700887 :meth:`loop.getaddrinfo` will be used to resolve the
Yury Selivanov55c50842016-06-08 12:48:15 -0400888 *address*.
889
Victor Stinnerc1567df2014-02-08 23:22:58 +0100890 .. seealso::
891
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700892 :meth:`loop.create_connection`
Yury Selivanov55c50842016-06-08 12:48:15 -0400893 and :func:`asyncio.open_connection() <open_connection>`.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100894
895
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700896.. coroutinemethod:: loop.sock_accept(sock)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100897
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700898 Accept a connection. Modeled after the blocking
899 :meth:`socket.accept() <socket.socket.accept>` method.
Yury Selivanov55c50842016-06-08 12:48:15 -0400900
901 The socket must be bound to an address and listening
Victor Stinnerc1567df2014-02-08 23:22:58 +0100902 for connections. The return value is a pair ``(conn, address)`` where *conn*
903 is a *new* socket object usable to send and receive data on the connection,
904 and *address* is the address bound to the socket on the other end of the
905 connection.
906
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400907 *sock* must be a non-blocking socket.
Victor Stinnerec2ce092014-07-29 23:12:22 +0200908
Yury Selivanov19a44f62017-12-14 20:53:26 -0500909 .. versionchanged:: 3.7
910 Even though the method was always documented as a coroutine
911 method, before Python 3.7 it returned a :class:`Future`.
912 Since Python 3.7, this is an ``async def`` method.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100913
914 .. seealso::
915
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700916 :meth:`loop.create_server` and :func:`start_server`.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100917
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700918.. coroutinemethod:: loop.sock_sendfile(sock, file, offset=0, count=None, \
919 \*, fallback=True)
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200920
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700921 Send a file using high-performance :mod:`os.sendfile` if possible.
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400922 Return the total number of bytes sent.
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200923
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700924 Asynchronous version of :meth:`socket.sendfile() <socket.socket.sendfile>`.
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200925
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400926 *sock* must be a non-blocking :const:`socket.SOCK_STREAM`
927 :class:`~socket.socket`.
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200928
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400929 *file* must be a regular file object open in binary mode.
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200930
931 *offset* tells from where to start reading the file. If specified,
932 *count* is the total number of bytes to transmit as opposed to
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400933 sending the file until EOF is reached. File position is always updated,
934 even when this method raises an error, and
935 :meth:`file.tell() <io.IOBase.tell>` can be used to obtain the actual
936 number of bytes sent.
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200937
Carol Willing5b7cbd62018-09-12 17:05:17 -0700938 *fallback*, when set to ``True``, makes asyncio manually read and send
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200939 the file when the platform does not support the sendfile syscall
940 (e.g. Windows or SSL socket on Unix).
941
Andrew Svetlov7464e872018-01-19 20:04:29 +0200942 Raise :exc:`SendfileNotAvailableError` if the system does not support
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200943 *sendfile* syscall and *fallback* is ``False``.
944
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400945 *sock* must be a non-blocking socket.
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700946
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200947 .. versionadded:: 3.7
948
Victor Stinnerc1567df2014-02-08 23:22:58 +0100949
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700950DNS
951^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +0100952
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700953.. coroutinemethod:: loop.getaddrinfo(host, port, \*, family=0, \
954 type=0, proto=0, flags=0)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100955
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700956 Asynchronous version of :meth:`socket.getaddrinfo`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100957
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700958.. coroutinemethod:: loop.getnameinfo(sockaddr, flags=0)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100959
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700960 Asynchronous version of :meth:`socket.getnameinfo`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100961
Yury Selivanovbec23722018-01-28 14:09:40 -0500962.. versionchanged:: 3.7
963 Both *getaddrinfo* and *getnameinfo* methods were always documented
964 to return a coroutine, but prior to Python 3.7 they were, in fact,
965 returning :class:`asyncio.Future` objects. Starting with Python 3.7
966 both methods are coroutines.
967
Victor Stinnerea3183f2013-12-03 01:08:00 +0100968
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700969Working with pipes
970^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +0100971
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700972.. coroutinemethod:: loop.connect_read_pipe(protocol_factory, pipe)
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200973
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400974 Register the read end of *pipe* in the event loop.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100975
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700976 *protocol_factory* must be a callable returning an
977 :ref:`asyncio protocol <asyncio-protocol>` implementation.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100978
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700979 *pipe* is a :term:`file-like object <file object>`.
980
981 Return pair ``(transport, protocol)``, where *transport* supports
Bumsik Kim5cc583d2018-09-16 19:40:44 -0400982 the :class:`ReadTransport` interface and *protocol* is an object
983 instantiated by the *protocol_factory*.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100984
Victor Stinnerd84fd732014-08-26 01:01:59 +0200985 With :class:`SelectorEventLoop` event loop, the *pipe* is set to
986 non-blocking mode.
987
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700988.. coroutinemethod:: loop.connect_write_pipe(protocol_factory, pipe)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100989
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400990 Register the write end of *pipe* in the event loop.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100991
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700992 *protocol_factory* must be a callable returning an
993 :ref:`asyncio protocol <asyncio-protocol>` implementation.
994
995 *pipe* is :term:`file-like object <file object>`.
996
Victor Stinner2cef3002014-10-23 22:38:46 +0200997 Return pair ``(transport, protocol)``, where *transport* supports
Bumsik Kim5cc583d2018-09-16 19:40:44 -0400998 :class:`WriteTransport` interface and *protocol* is an object
999 instantiated by the *protocol_factory*.
Victor Stinnerea3183f2013-12-03 01:08:00 +01001000
Victor Stinnerd84fd732014-08-26 01:01:59 +02001001 With :class:`SelectorEventLoop` event loop, the *pipe* is set to
1002 non-blocking mode.
1003
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001004.. note::
1005
1006 :class:`SelectorEventLoop` does not support the above methods on
Carol Willing5b7cbd62018-09-12 17:05:17 -07001007 Windows. Use :class:`ProactorEventLoop` instead for Windows.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001008
Victor Stinner08444382014-02-02 22:43:39 +01001009.. seealso::
1010
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001011 The :meth:`loop.subprocess_exec` and
1012 :meth:`loop.subprocess_shell` methods.
Victor Stinner08444382014-02-02 22:43:39 +01001013
Victor Stinnerea3183f2013-12-03 01:08:00 +01001014
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001015Unix signals
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001016^^^^^^^^^^^^
Victor Stinner8b863482014-01-27 10:07:50 +01001017
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001018.. method:: loop.add_signal_handler(signum, callback, \*args)
Victor Stinner8b863482014-01-27 10:07:50 +01001019
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001020 Set *callback* as the handler for the *signum* signal.
Victor Stinner8b863482014-01-27 10:07:50 +01001021
Hrvoje Nikšiće3666fc2018-12-18 22:31:29 +01001022 The callback will be invoked by *loop*, along with other queued callbacks
1023 and runnable coroutines of that event loop. Unlike signal handlers
1024 registered using :func:`signal.signal`, a callback registered with this
1025 function is allowed to interact with the event loop.
1026
Victor Stinner8b863482014-01-27 10:07:50 +01001027 Raise :exc:`ValueError` if the signal number is invalid or uncatchable.
1028 Raise :exc:`RuntimeError` if there is a problem setting up the handler.
1029
Yury Selivanove247b462018-09-20 12:43:59 -04001030 Use :func:`functools.partial` :ref:`to pass keyword arguments
Naglis17473342018-12-04 09:31:15 +02001031 <asyncio-pass-keywords>` to *callback*.
Victor Stinner8464c242014-11-28 13:15:41 +01001032
Hrvoje Nikšiće3666fc2018-12-18 22:31:29 +01001033 Like :func:`signal.signal`, this function must be invoked in the main
1034 thread.
1035
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001036.. method:: loop.remove_signal_handler(sig)
Victor Stinner8b863482014-01-27 10:07:50 +01001037
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001038 Remove the handler for the *sig* signal.
Victor Stinner8b863482014-01-27 10:07:50 +01001039
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001040 Return ``True`` if the signal handler was removed, or ``False`` if
1041 no handler was set for the given signal.
Victor Stinner8b863482014-01-27 10:07:50 +01001042
Cheryl Sabella2d6097d2018-10-12 10:55:20 -04001043 .. availability:: Unix.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001044
Victor Stinner8b863482014-01-27 10:07:50 +01001045.. seealso::
1046
1047 The :mod:`signal` module.
1048
1049
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001050Executing code in thread or process pools
1051^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +01001052
Yury Selivanov47150392018-09-18 17:55:44 -04001053.. awaitablemethod:: loop.run_in_executor(executor, func, \*args)
Victor Stinnerea3183f2013-12-03 01:08:00 +01001054
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001055 Arrange for *func* to be called in the specified executor.
Victor Stinnerea3183f2013-12-03 01:08:00 +01001056
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001057 The *executor* argument should be an :class:`concurrent.futures.Executor`
Larry Hastings3732ed22014-03-15 21:13:56 -07001058 instance. The default executor is used if *executor* is ``None``.
Victor Stinnerea3183f2013-12-03 01:08:00 +01001059
Yury Selivanove247b462018-09-20 12:43:59 -04001060 Example::
1061
1062 import asyncio
1063 import concurrent.futures
1064
1065 def blocking_io():
1066 # File operations (such as logging) can block the
1067 # event loop: run them in a thread pool.
1068 with open('/dev/urandom', 'rb') as f:
1069 return f.read(100)
1070
1071 def cpu_bound():
1072 # CPU-bound operations will block the event loop:
1073 # in general it is preferable to run them in a
1074 # process pool.
1075 return sum(i * i for i in range(10 ** 7))
1076
1077 async def main():
1078 loop = asyncio.get_running_loop()
1079
1080 ## Options:
1081
1082 # 1. Run in the default loop's executor:
1083 result = await loop.run_in_executor(
1084 None, blocking_io)
1085 print('default thread pool', result)
1086
1087 # 2. Run in a custom thread pool:
1088 with concurrent.futures.ThreadPoolExecutor() as pool:
1089 result = await loop.run_in_executor(
1090 pool, blocking_io)
1091 print('custom thread pool', result)
1092
1093 # 3. Run in a custom process pool:
1094 with concurrent.futures.ProcessPoolExecutor() as pool:
1095 result = await loop.run_in_executor(
1096 pool, cpu_bound)
1097 print('custom process pool', result)
1098
1099 asyncio.run(main())
Victor Stinner8464c242014-11-28 13:15:41 +01001100
Yury Selivanovbec23722018-01-28 14:09:40 -05001101 This method returns a :class:`asyncio.Future` object.
1102
Yury Selivanove247b462018-09-20 12:43:59 -04001103 Use :func:`functools.partial` :ref:`to pass keyword arguments
1104 <asyncio-pass-keywords>` to *func*.
1105
Yury Selivanove8a60452016-10-21 17:40:42 -04001106 .. versionchanged:: 3.5.3
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001107 :meth:`loop.run_in_executor` no longer configures the
Yury Selivanove8a60452016-10-21 17:40:42 -04001108 ``max_workers`` of the thread pool executor it creates, instead
1109 leaving it up to the thread pool executor
1110 (:class:`~concurrent.futures.ThreadPoolExecutor`) to set the
1111 default.
1112
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001113.. method:: loop.set_default_executor(executor)
Victor Stinnerea3183f2013-12-03 01:08:00 +01001114
Elvis Pranskevichus22d25082018-07-30 11:42:43 +01001115 Set *executor* as the default executor used by :meth:`run_in_executor`.
1116 *executor* should be an instance of
1117 :class:`~concurrent.futures.ThreadPoolExecutor`.
1118
1119 .. deprecated:: 3.8
1120 Using an executor that is not an instance of
1121 :class:`~concurrent.futures.ThreadPoolExecutor` is deprecated and
1122 will trigger an error in Python 3.9.
Victor Stinnerea3183f2013-12-03 01:08:00 +01001123
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001124 *executor* must be an instance of
1125 :class:`concurrent.futures.ThreadPoolExecutor`.
1126
Victor Stinnerea3183f2013-12-03 01:08:00 +01001127
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001128Error Handling API
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001129^^^^^^^^^^^^^^^^^^
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001130
Martin Panterc04fb562016-02-10 05:44:01 +00001131Allows customizing how exceptions are handled in the event loop.
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001132
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001133.. method:: loop.set_exception_handler(handler)
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001134
1135 Set *handler* as the new event loop exception handler.
1136
1137 If *handler* is ``None``, the default exception handler will
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001138 be set. Otherwise, *handler* must be a callable with the signature
1139 matching ``(loop, context)``, where ``loop``
1140 is a reference to the active event loop, and ``context``
1141 is a ``dict`` object containing the details of the exception
1142 (see :meth:`call_exception_handler` documentation for details
1143 about context).
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001144
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001145.. method:: loop.get_exception_handler()
Yury Selivanov950204d2016-05-16 16:23:00 -04001146
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001147 Return the current exception handler, or ``None`` if no custom
1148 exception handler was set.
Yury Selivanov950204d2016-05-16 16:23:00 -04001149
1150 .. versionadded:: 3.5.2
1151
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001152.. method:: loop.default_exception_handler(context)
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001153
1154 Default exception handler.
1155
1156 This is called when an exception occurs and no exception
Carol Willing5b7cbd62018-09-12 17:05:17 -07001157 handler is set. This can be called by a custom exception
1158 handler that wants to defer to the default handler behavior.
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001159
1160 *context* parameter has the same meaning as in
1161 :meth:`call_exception_handler`.
1162
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001163.. method:: loop.call_exception_handler(context)
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001164
1165 Call the current event loop exception handler.
1166
1167 *context* is a ``dict`` object containing the following keys
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001168 (new keys may be introduced in future Python versions):
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001169
1170 * 'message': Error message;
1171 * 'exception' (optional): Exception object;
1172 * 'future' (optional): :class:`asyncio.Future` instance;
1173 * 'handle' (optional): :class:`asyncio.Handle` instance;
1174 * 'protocol' (optional): :ref:`Protocol <asyncio-protocol>` instance;
1175 * 'transport' (optional): :ref:`Transport <asyncio-transport>` instance;
1176 * 'socket' (optional): :class:`socket.socket` instance.
1177
1178 .. note::
1179
Carol Willing5b7cbd62018-09-12 17:05:17 -07001180 This method should not be overloaded in subclassed
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001181 event loops. For custom exception handling, use
1182 the :meth:`set_exception_handler()` method.
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001183
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001184Enabling debug mode
1185^^^^^^^^^^^^^^^^^^^
Victor Stinner0f3e6bc2014-02-19 23:15:02 +01001186
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001187.. method:: loop.get_debug()
Victor Stinner0f3e6bc2014-02-19 23:15:02 +01001188
Victor Stinner7b7120e2014-06-23 00:12:14 +02001189 Get the debug mode (:class:`bool`) of the event loop.
1190
1191 The default value is ``True`` if the environment variable
1192 :envvar:`PYTHONASYNCIODEBUG` is set to a non-empty string, ``False``
1193 otherwise.
Victor Stinner0f3e6bc2014-02-19 23:15:02 +01001194
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001195.. method:: loop.set_debug(enabled: bool)
Victor Stinner0f3e6bc2014-02-19 23:15:02 +01001196
1197 Set the debug mode of the event loop.
1198
Yury Selivanov805e27e2018-09-14 16:57:11 -07001199 .. versionchanged:: 3.7
1200
1201 The new ``-X dev`` command line option can now also be used
1202 to enable the debug mode.
1203
Victor Stinner0f3e6bc2014-02-19 23:15:02 +01001204.. seealso::
1205
Victor Stinner62511fd2014-06-23 00:36:11 +02001206 The :ref:`debug mode of asyncio <asyncio-debug-mode>`.
Victor Stinner0f3e6bc2014-02-19 23:15:02 +01001207
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001208
1209Running Subprocesses
1210^^^^^^^^^^^^^^^^^^^^
1211
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001212Methods described in this subsections are low-level. In regular
1213async/await code consider using the high-level
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001214:func:`asyncio.create_subprocess_shell` and
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001215:func:`asyncio.create_subprocess_exec` convenience functions instead.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001216
1217.. note::
1218
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001219 The default asyncio event loop on **Windows** does not support
1220 subprocesses. See :ref:`Subprocess Support on Windows
1221 <asyncio-windows-subprocess>` for details.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001222
1223.. coroutinemethod:: loop.subprocess_exec(protocol_factory, \*args, \
1224 stdin=subprocess.PIPE, stdout=subprocess.PIPE, \
1225 stderr=subprocess.PIPE, \*\*kwargs)
1226
1227 Create a subprocess from one or more string arguments specified by
1228 *args*.
1229
1230 *args* must be a list of strings represented by:
1231
1232 * :class:`str`;
1233 * or :class:`bytes`, encoded to the
1234 :ref:`filesystem encoding <filesystem-encoding>`.
1235
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001236 The first string specifies the program executable,
Carol Willing5b7cbd62018-09-12 17:05:17 -07001237 and the remaining strings specify the arguments. Together, string
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001238 arguments form the ``argv`` of the program.
1239
1240 This is similar to the standard library :class:`subprocess.Popen`
1241 class called with ``shell=False`` and the list of strings passed as
1242 the first argument; however, where :class:`~subprocess.Popen` takes
1243 a single argument which is list of strings, *subprocess_exec*
1244 takes multiple string arguments.
1245
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001246 The *protocol_factory* must be a callable returning a subclass of the
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001247 :class:`asyncio.SubprocessProtocol` class.
1248
1249 Other parameters:
1250
sbstpf0d4c642019-05-27 19:51:19 -04001251 * *stdin* 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 input 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
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001262
sbstpf0d4c642019-05-27 19:51:19 -04001263 * *stdout* can be any of these:
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001264
sbstpf0d4c642019-05-27 19:51:19 -04001265 * a file-like object representing a pipe to be connected to the
1266 subprocess's standard output 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
1275 * *stderr* can be any of these:
1276
1277 * a file-like object representing a pipe to be connected to the
1278 subprocess's standard error stream using
1279 :meth:`~loop.connect_write_pipe`
1280 * the :const:`subprocess.PIPE` constant (default) which will create a new
1281 pipe and connect it,
1282 * the value ``None`` which will make the subprocess inherit the file
1283 descriptor from this process
1284 * the :const:`subprocess.DEVNULL` constant which indicates that the
1285 special :data:`os.devnull` file will be used
1286 * the :const:`subprocess.STDOUT` constant which will connect the standard
1287 error stream to the process' standard output stream
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001288
1289 * All other keyword arguments are passed to :class:`subprocess.Popen`
sbstpf0d4c642019-05-27 19:51:19 -04001290 without interpretation, except for *bufsize*, *universal_newlines*,
1291 *shell*, *text*, *encoding* and *errors*, which should not be specified
1292 at all.
1293
1294 The ``asyncio`` subprocess API does not support decoding the streams
1295 as text. :func:`bytes.decode` can be used to convert the bytes returned
1296 from the stream to text.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001297
1298 See the constructor of the :class:`subprocess.Popen` class
1299 for documentation on other arguments.
1300
1301 Returns a pair of ``(transport, protocol)``, where *transport*
Bumsik Kim5cc583d2018-09-16 19:40:44 -04001302 conforms to the :class:`asyncio.SubprocessTransport` base class and
1303 *protocol* is an object instantiated by the *protocol_factory*.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001304
1305.. coroutinemethod:: loop.subprocess_shell(protocol_factory, cmd, \*, \
1306 stdin=subprocess.PIPE, stdout=subprocess.PIPE, \
1307 stderr=subprocess.PIPE, \*\*kwargs)
1308
1309 Create a subprocess from *cmd*, which can be a :class:`str` or a
1310 :class:`bytes` string encoded to the
1311 :ref:`filesystem encoding <filesystem-encoding>`,
1312 using the platform's "shell" syntax.
1313
1314 This is similar to the standard library :class:`subprocess.Popen`
1315 class called with ``shell=True``.
1316
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001317 The *protocol_factory* must be a callable returning a subclass of the
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001318 :class:`SubprocessProtocol` class.
1319
1320 See :meth:`~loop.subprocess_exec` for more details about
1321 the remaining arguments.
1322
1323 Returns a pair of ``(transport, protocol)``, where *transport*
Bumsik Kim5cc583d2018-09-16 19:40:44 -04001324 conforms to the :class:`SubprocessTransport` base class and
1325 *protocol* is an object instantiated by the *protocol_factory*.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001326
1327.. note::
1328 It is the application's responsibility to ensure that all whitespace
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001329 and special characters are quoted appropriately to avoid `shell injection
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001330 <https://en.wikipedia.org/wiki/Shell_injection#Shell_injection>`_
1331 vulnerabilities. The :func:`shlex.quote` function can be used to
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001332 properly escape whitespace and special characters in strings that
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001333 are going to be used to construct shell commands.
1334
1335
1336Callback Handles
1337================
1338
1339.. class:: Handle
1340
1341 A callback wrapper object returned by :meth:`loop.call_soon`,
1342 :meth:`loop.call_soon_threadsafe`.
1343
1344 .. method:: cancel()
1345
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001346 Cancel the callback. If the callback has already been canceled
1347 or executed, this method has no effect.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001348
1349 .. method:: cancelled()
1350
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001351 Return ``True`` if the callback was cancelled.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001352
1353 .. versionadded:: 3.7
1354
1355.. class:: TimerHandle
1356
1357 A callback wrapper object returned by :meth:`loop.call_later`,
1358 and :meth:`loop.call_at`.
1359
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001360 This class is a subclass of :class:`Handle`.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001361
1362 .. method:: when()
1363
1364 Return a scheduled callback time as :class:`float` seconds.
1365
1366 The time is an absolute timestamp, using the same time
1367 reference as :meth:`loop.time`.
1368
1369 .. versionadded:: 3.7
1370
1371
1372Server Objects
1373==============
1374
1375Server objects are created by :meth:`loop.create_server`,
1376:meth:`loop.create_unix_server`, :func:`start_server`,
1377and :func:`start_unix_server` functions.
1378
1379Do not instantiate the class directly.
Victor Stinner8c462c52014-01-24 18:11:43 +01001380
Victor Stinner8ebeb032014-07-11 23:47:40 +02001381.. class:: Server
Victor Stinner8c462c52014-01-24 18:11:43 +01001382
Yury Selivanovc9070d02018-01-25 18:08:09 -05001383 *Server* objects are asynchronous context managers. When used in an
1384 ``async with`` statement, it's guaranteed that the Server object is
1385 closed and not accepting new connections when the ``async with``
1386 statement is completed::
1387
1388 srv = await loop.create_server(...)
1389
1390 async with srv:
1391 # some code
1392
Carol Willing5b7cbd62018-09-12 17:05:17 -07001393 # At this point, srv is closed and no longer accepts new connections.
Yury Selivanovc9070d02018-01-25 18:08:09 -05001394
1395
1396 .. versionchanged:: 3.7
1397 Server object is an asynchronous context manager since Python 3.7.
Victor Stinner8c462c52014-01-24 18:11:43 +01001398
1399 .. method:: close()
1400
Victor Stinner4bfb14a2014-07-12 03:20:24 +02001401 Stop serving: close listening sockets and set the :attr:`sockets`
1402 attribute to ``None``.
1403
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001404 The sockets that represent existing incoming client connections
1405 are left open.
Victor Stinner8ebeb032014-07-11 23:47:40 +02001406
Berker Peksag49c9edf2016-01-20 07:14:22 +02001407 The server is closed asynchronously, use the :meth:`wait_closed`
1408 coroutine to wait until the server is closed.
Victor Stinner8c462c52014-01-24 18:11:43 +01001409
Srinivas Reddy Thatiparthy (శ్రీనివాస్ రెడ్డి తాటిపర్తి)1634fc22017-12-30 20:39:32 +05301410 .. method:: get_loop()
1411
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001412 Return the event loop associated with the server object.
Srinivas Reddy Thatiparthy (శ్రీనివాస్ రెడ్డి తాటిపర్తి)1634fc22017-12-30 20:39:32 +05301413
1414 .. versionadded:: 3.7
1415
Yury Selivanovc9070d02018-01-25 18:08:09 -05001416 .. coroutinemethod:: start_serving()
1417
1418 Start accepting connections.
1419
1420 This method is idempotent, so it can be called when
1421 the server is already being serving.
1422
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001423 The *start_serving* keyword-only parameter to
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001424 :meth:`loop.create_server` and
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001425 :meth:`asyncio.start_server` allows creating a Server object
1426 that is not accepting connections initially. In this case
1427 ``Server.start_serving()``, or :meth:`Server.serve_forever` can be used
1428 to make the Server start accepting connections.
Yury Selivanovc9070d02018-01-25 18:08:09 -05001429
1430 .. versionadded:: 3.7
1431
1432 .. coroutinemethod:: serve_forever()
1433
1434 Start accepting connections until the coroutine is cancelled.
1435 Cancellation of ``serve_forever`` task causes the server
1436 to be closed.
1437
1438 This method can be called if the server is already accepting
1439 connections. Only one ``serve_forever`` task can exist per
1440 one *Server* object.
1441
1442 Example::
1443
1444 async def client_connected(reader, writer):
1445 # Communicate with the client with
1446 # reader/writer streams. For example:
1447 await reader.readline()
1448
1449 async def main(host, port):
1450 srv = await asyncio.start_server(
1451 client_connected, host, port)
Andrew Svetlov17ab8f02018-02-17 19:44:35 +02001452 await srv.serve_forever()
Yury Selivanovc9070d02018-01-25 18:08:09 -05001453
1454 asyncio.run(main('127.0.0.1', 0))
1455
1456 .. versionadded:: 3.7
1457
1458 .. method:: is_serving()
1459
1460 Return ``True`` if the server is accepting new connections.
1461
1462 .. versionadded:: 3.7
1463
Victor Stinnerbdd574d2015-02-12 22:49:18 +01001464 .. coroutinemethod:: wait_closed()
Victor Stinner8c462c52014-01-24 18:11:43 +01001465
Victor Stinner8ebeb032014-07-11 23:47:40 +02001466 Wait until the :meth:`close` method completes.
1467
Victor Stinner8ebeb032014-07-11 23:47:40 +02001468 .. attribute:: sockets
1469
Emmanuel Ariasdf5cdc12019-02-22 14:34:41 -03001470 List of :class:`socket.socket` objects the server is listening on.
Victor Stinner8c462c52014-01-24 18:11:43 +01001471
Yury Selivanovc9070d02018-01-25 18:08:09 -05001472 .. versionchanged:: 3.7
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001473 Prior to Python 3.7 ``Server.sockets`` used to return an
1474 internal list of server sockets directly. In 3.7 a copy
Yury Selivanovc9070d02018-01-25 18:08:09 -05001475 of that list is returned.
1476
Victor Stinner8c462c52014-01-24 18:11:43 +01001477
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001478.. _asyncio-event-loops:
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001479
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001480Event Loop Implementations
1481==========================
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001482
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001483asyncio ships with two different event loop implementations:
1484:class:`SelectorEventLoop` and :class:`ProactorEventLoop`.
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001485
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001486By default asyncio is configured to use :class:`SelectorEventLoop`
Ben Darnell9ffca672019-06-22 13:38:21 -04001487on Unix and :class:`ProactorEventLoop` on Windows.
Andrew Svetlov3d4dbd82018-02-01 19:59:32 +02001488
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001489
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001490.. class:: SelectorEventLoop
1491
1492 An event loop based on the :mod:`selectors` module.
1493
1494 Uses the most efficient *selector* available for the given
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001495 platform. It is also possible to manually configure the
1496 exact selector implementation to be used::
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001497
1498 import asyncio
1499 import selectors
1500
1501 selector = selectors.SelectSelector()
1502 loop = asyncio.SelectorEventLoop(selector)
1503 asyncio.set_event_loop(loop)
Andrew Svetlov7464e872018-01-19 20:04:29 +02001504
1505
Cheryl Sabella2d6097d2018-10-12 10:55:20 -04001506 .. availability:: Unix, Windows.
Andrew Svetlov7464e872018-01-19 20:04:29 +02001507
1508
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001509.. class:: ProactorEventLoop
1510
1511 An event loop for Windows that uses "I/O Completion Ports" (IOCP).
1512
Cheryl Sabella2d6097d2018-10-12 10:55:20 -04001513 .. availability:: Windows.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001514
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001515 .. seealso::
1516
1517 `MSDN documentation on I/O Completion Ports
1518 <https://docs.microsoft.com/en-ca/windows/desktop/FileIO/i-o-completion-ports>`_.
1519
1520
1521.. class:: AbstractEventLoop
1522
1523 Abstract base class for asyncio-compliant event loops.
1524
1525 The :ref:`Event Loop Methods <asyncio-event-loop>` section lists all
1526 methods that an alternative implementation of ``AbstractEventLoop``
1527 should have defined.
1528
1529
1530Examples
1531========
1532
1533Note that all examples in this section **purposefully** show how
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001534to use the low-level event loop APIs, such as :meth:`loop.run_forever`
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001535and :meth:`loop.call_soon`. Modern asyncio applications rarely
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001536need to be written this way; consider using the high-level functions
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001537like :func:`asyncio.run`.
1538
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001539
Yury Selivanov394374e2018-09-17 15:35:24 -04001540.. _asyncio_example_lowlevel_helloworld:
Victor Stinnerea3183f2013-12-03 01:08:00 +01001541
Victor Stinner7f314ed2014-10-15 18:49:16 +02001542Hello World with call_soon()
Victor Stinnera092a612015-01-09 15:58:41 +01001543^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +01001544
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001545An example using the :meth:`loop.call_soon` method to schedule a
1546callback. The callback displays ``"Hello World"`` and then stops the
1547event loop::
Victor Stinnerea3183f2013-12-03 01:08:00 +01001548
1549 import asyncio
1550
Victor Stinner7f314ed2014-10-15 18:49:16 +02001551 def hello_world(loop):
Carol Willing5b7cbd62018-09-12 17:05:17 -07001552 """A callback to print 'Hello World' and stop the event loop"""
Victor Stinnerea3183f2013-12-03 01:08:00 +01001553 print('Hello World')
Victor Stinner7f314ed2014-10-15 18:49:16 +02001554 loop.stop()
Victor Stinnerea3183f2013-12-03 01:08:00 +01001555
1556 loop = asyncio.get_event_loop()
Victor Stinner7f314ed2014-10-15 18:49:16 +02001557
1558 # Schedule a call to hello_world()
1559 loop.call_soon(hello_world, loop)
1560
1561 # Blocking call interrupted by loop.stop()
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001562 try:
1563 loop.run_forever()
1564 finally:
1565 loop.close()
Victor Stinnerea3183f2013-12-03 01:08:00 +01001566
Victor Stinner3e09e322013-12-03 01:22:06 +01001567.. seealso::
Victor Stinnerea3183f2013-12-03 01:08:00 +01001568
Yury Selivanov3faaa882018-09-14 13:32:07 -07001569 A similar :ref:`Hello World <coroutine>`
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001570 example created with a coroutine and the :func:`run` function.
Victor Stinnerea3183f2013-12-03 01:08:00 +01001571
Victor Stinner8b863482014-01-27 10:07:50 +01001572
Yury Selivanov394374e2018-09-17 15:35:24 -04001573.. _asyncio_example_call_later:
Victor Stinner7f314ed2014-10-15 18:49:16 +02001574
1575Display the current date with call_later()
Victor Stinnera092a612015-01-09 15:58:41 +01001576^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinner7f314ed2014-10-15 18:49:16 +02001577
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001578An example of a callback displaying the current date every second. The
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001579callback uses the :meth:`loop.call_later` method to reschedule itself
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001580after 5 seconds, and then stops the event loop::
Victor Stinner7f314ed2014-10-15 18:49:16 +02001581
1582 import asyncio
1583 import datetime
1584
1585 def display_date(end_time, loop):
1586 print(datetime.datetime.now())
1587 if (loop.time() + 1.0) < end_time:
1588 loop.call_later(1, display_date, end_time, loop)
1589 else:
1590 loop.stop()
1591
1592 loop = asyncio.get_event_loop()
1593
1594 # Schedule the first call to display_date()
1595 end_time = loop.time() + 5.0
1596 loop.call_soon(display_date, end_time, loop)
1597
1598 # Blocking call interrupted by loop.stop()
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001599 try:
1600 loop.run_forever()
1601 finally:
1602 loop.close()
Victor Stinner7f314ed2014-10-15 18:49:16 +02001603
1604.. seealso::
1605
Yury Selivanov7372c3b2018-09-14 15:11:24 -07001606 A similar :ref:`current date <asyncio_example_sleep>` example
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001607 created with a coroutine and the :func:`run` function.
Victor Stinner7f314ed2014-10-15 18:49:16 +02001608
1609
Yury Selivanov394374e2018-09-17 15:35:24 -04001610.. _asyncio_example_watch_fd:
Victor Stinner8b863482014-01-27 10:07:50 +01001611
Victor Stinner04e6df32014-10-11 16:16:27 +02001612Watch a file descriptor for read events
Victor Stinnera092a612015-01-09 15:58:41 +01001613^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinner04e6df32014-10-11 16:16:27 +02001614
1615Wait until a file descriptor received some data using the
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001616:meth:`loop.add_reader` method and then close the event loop::
Victor Stinner04e6df32014-10-11 16:16:27 +02001617
1618 import asyncio
Victor Stinnerac577d72017-11-28 21:33:20 +01001619 from socket import socketpair
Victor Stinner04e6df32014-10-11 16:16:27 +02001620
1621 # Create a pair of connected file descriptors
Victor Stinnerccd8e342014-10-11 16:30:02 +02001622 rsock, wsock = socketpair()
Carol Willing5b7cbd62018-09-12 17:05:17 -07001623
Victor Stinner04e6df32014-10-11 16:16:27 +02001624 loop = asyncio.get_event_loop()
1625
1626 def reader():
1627 data = rsock.recv(100)
1628 print("Received:", data.decode())
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001629
Victor Stinner2cef3002014-10-23 22:38:46 +02001630 # We are done: unregister the file descriptor
Victor Stinner04e6df32014-10-11 16:16:27 +02001631 loop.remove_reader(rsock)
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001632
Victor Stinner04e6df32014-10-11 16:16:27 +02001633 # Stop the event loop
1634 loop.stop()
1635
Victor Stinner2cef3002014-10-23 22:38:46 +02001636 # Register the file descriptor for read event
Victor Stinner04e6df32014-10-11 16:16:27 +02001637 loop.add_reader(rsock, reader)
1638
1639 # Simulate the reception of data from the network
1640 loop.call_soon(wsock.send, 'abc'.encode())
1641
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001642 try:
1643 # Run the event loop
1644 loop.run_forever()
1645 finally:
Carol Willing5b7cbd62018-09-12 17:05:17 -07001646 # We are done. Close sockets and the event loop.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001647 rsock.close()
1648 wsock.close()
1649 loop.close()
Victor Stinner04e6df32014-10-11 16:16:27 +02001650
1651.. seealso::
1652
Yury Selivanov394374e2018-09-17 15:35:24 -04001653 * A similar :ref:`example <asyncio_example_create_connection>`
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001654 using transports, protocols, and the
1655 :meth:`loop.create_connection` method.
Victor Stinner04e6df32014-10-11 16:16:27 +02001656
Yury Selivanov394374e2018-09-17 15:35:24 -04001657 * Another similar :ref:`example <asyncio_example_create_connection-streams>`
Yury Selivanov6758e6e2019-09-29 21:59:55 -07001658 using the high-level :func:`asyncio.open_connection` function
1659 and streams.
Victor Stinner04e6df32014-10-11 16:16:27 +02001660
1661
Yury Selivanov394374e2018-09-17 15:35:24 -04001662.. _asyncio_example_unix_signals:
1663
Victor Stinner04e6df32014-10-11 16:16:27 +02001664Set signal handlers for SIGINT and SIGTERM
Victor Stinnera092a612015-01-09 15:58:41 +01001665^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinner04e6df32014-10-11 16:16:27 +02001666
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001667(This ``signals`` example only works on Unix.)
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001668
1669Register handlers for signals :py:data:`SIGINT` and :py:data:`SIGTERM`
1670using the :meth:`loop.add_signal_handler` method::
Victor Stinner8b863482014-01-27 10:07:50 +01001671
1672 import asyncio
1673 import functools
1674 import os
1675 import signal
1676
Alexander Vasinceb842e2019-05-03 18:25:36 +03001677 def ask_exit(signame, loop):
Victor Stinner8b863482014-01-27 10:07:50 +01001678 print("got signal %s: exit" % signame)
1679 loop.stop()
1680
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001681 async def main():
1682 loop = asyncio.get_running_loop()
Victor Stinner8b863482014-01-27 10:07:50 +01001683
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001684 for signame in {'SIGINT', 'SIGTERM'}:
1685 loop.add_signal_handler(
1686 getattr(signal, signame),
Alexander Vasinceb842e2019-05-03 18:25:36 +03001687 functools.partial(ask_exit, signame, loop))
Victor Stinner2cef3002014-10-23 22:38:46 +02001688
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001689 await asyncio.sleep(3600)
1690
1691 print("Event loop running for 1 hour, press Ctrl+C to interrupt.")
1692 print(f"pid {os.getpid()}: send SIGINT or SIGTERM to exit.")
1693
1694 asyncio.run(main())