blob: 24f621e2d9fffa754a29e01ef663a3b28f2bfc3a [file] [log] [blame]
R David Murray6a143812013-12-20 14:37:39 -05001.. currentmodule:: asyncio
Victor Stinnerea3183f2013-12-03 01:08:00 +01002
Yury Selivanov7c7605f2018-09-11 09:54:40 -07003
4==========
5Event Loop
6==========
7
Miss Islington (bot)6bfeb812019-10-10 16:25:28 -07008**Source code:** :source:`Lib/asyncio/events.py`,
9:source:`Lib/asyncio/base_events.py`
10
11------------------------------------
Yury Selivanov7c7605f2018-09-11 09:54:40 -070012
13.. rubric:: Preface
14
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -040015The event loop is the core of every asyncio application.
Yury Selivanov7c7605f2018-09-11 09:54:40 -070016Event loops run asynchronous tasks and callbacks, perform network
Carol Willing5b7cbd62018-09-12 17:05:17 -070017IO operations, and run subprocesses.
Yury Selivanov7c7605f2018-09-11 09:54:40 -070018
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -040019Application developers should typically use the high-level asyncio functions,
20such as :func:`asyncio.run`, and should rarely need to reference the loop
21object or call its methods. This section is intended mostly for authors
22of lower-level code, libraries, and frameworks, who need finer control over
23the event loop behavior.
Yury Selivanov7c7605f2018-09-11 09:54:40 -070024
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -040025.. rubric:: Obtaining the Event Loop
Yury Selivanov7c7605f2018-09-11 09:54:40 -070026
27The following low-level functions can be used to get, set, or create
28an event loop:
29
30.. function:: get_running_loop()
31
32 Return the running event loop in the current OS thread.
33
34 If there is no running event loop a :exc:`RuntimeError` is raised.
35 This function can only be called from a coroutine or a callback.
36
37 .. versionadded:: 3.7
38
39.. function:: get_event_loop()
40
Miss Islington (bot)6aeed012020-01-20 14:52:35 -080041 Get the current event loop.
42
43 If there is no current event loop set in the current OS thread,
44 the OS thread is main, and :func:`set_event_loop` has not yet
Yury Selivanov7c7605f2018-09-11 09:54:40 -070045 been called, asyncio will create a new event loop and set it as the
46 current one.
47
Carol Willing5b7cbd62018-09-12 17:05:17 -070048 Because this function has rather complex behavior (especially
49 when custom event loop policies are in use), using the
50 :func:`get_running_loop` function is preferred to :func:`get_event_loop`
51 in coroutines and callbacks.
Yury Selivanov7c7605f2018-09-11 09:54:40 -070052
Carol Willing5b7cbd62018-09-12 17:05:17 -070053 Consider also using the :func:`asyncio.run` function instead of using
54 lower level functions to manually create and close an event loop.
Yury Selivanov7c7605f2018-09-11 09:54:40 -070055
56.. function:: set_event_loop(loop)
57
58 Set *loop* as a current event loop for the current OS thread.
59
60.. function:: new_event_loop()
61
62 Create a new event loop object.
63
64Note that the behaviour of :func:`get_event_loop`, :func:`set_event_loop`,
65and :func:`new_event_loop` functions can be altered by
66:ref:`setting a custom event loop policy <asyncio-policies>`.
67
68
69.. rubric:: Contents
70
71This documentation page contains the following sections:
72
Carol Willing5b7cbd62018-09-12 17:05:17 -070073* The `Event Loop Methods`_ section is the reference documentation of
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -040074 the event loop APIs;
Yury Selivanov7c7605f2018-09-11 09:54:40 -070075
76* The `Callback Handles`_ section documents the :class:`Handle` and
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -040077 :class:`TimerHandle` instances which are returned from scheduling
78 methods such as :meth:`loop.call_soon` and :meth:`loop.call_later`;
Yury Selivanov7c7605f2018-09-11 09:54:40 -070079
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -040080* The `Server Objects`_ section documents types returned from
Yury Selivanov7c7605f2018-09-11 09:54:40 -070081 event loop methods like :meth:`loop.create_server`;
82
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -040083* The `Event Loop Implementations`_ section documents the
Yury Selivanov7c7605f2018-09-11 09:54:40 -070084 :class:`SelectorEventLoop` and :class:`ProactorEventLoop` classes;
85
86* The `Examples`_ section showcases how to work with some event
87 loop APIs.
88
89
Victor Stinner9592edb2014-02-02 15:03:02 +010090.. _asyncio-event-loop:
Victor Stinnerea3183f2013-12-03 01:08:00 +010091
Yury Selivanov7c7605f2018-09-11 09:54:40 -070092Event Loop Methods
93==================
Victor Stinnerea3183f2013-12-03 01:08:00 +010094
Carol Willing5b7cbd62018-09-12 17:05:17 -070095Event loops have **low-level** APIs for the following:
lf627d2c82017-07-25 17:03:51 -060096
Yury Selivanov7c7605f2018-09-11 09:54:40 -070097.. contents::
98 :depth: 1
99 :local:
Victor Stinnerea3183f2013-12-03 01:08:00 +0100100
Victor Stinnerea3183f2013-12-03 01:08:00 +0100101
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700102Running and stopping the loop
103^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +0100104
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700105.. method:: loop.run_until_complete(future)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100106
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400107 Run until the *future* (an instance of :class:`Future`) has
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700108 completed.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100109
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700110 If the argument is a :ref:`coroutine object <coroutine>` it
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400111 is implicitly scheduled to run as a :class:`asyncio.Task`.
Eli Bendersky136fea22014-02-09 06:55:58 -0800112
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700113 Return the Future's result or raise its exception.
Guido van Rossumf68afd82016-08-08 09:41:21 -0700114
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700115.. method:: loop.run_forever()
Guido van Rossumf68afd82016-08-08 09:41:21 -0700116
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700117 Run the event loop until :meth:`stop` is called.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100118
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700119 If :meth:`stop` is called before :meth:`run_forever()` is called,
120 the loop will poll the I/O selector once with a timeout of zero,
121 run all callbacks scheduled in response to I/O events (and
122 those that were already scheduled), and then exit.
Victor Stinner83704962015-02-25 14:24:15 +0100123
Guido van Rossum41f69f42015-11-19 13:28:47 -0800124 If :meth:`stop` is called while :meth:`run_forever` is running,
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700125 the loop will run the current batch of callbacks and then exit.
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400126 Note that new callbacks scheduled by callbacks will not run in this
Carol Willing5b7cbd62018-09-12 17:05:17 -0700127 case; instead, they will run the next time :meth:`run_forever` or
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700128 :meth:`run_until_complete` is called.
Guido van Rossum41f69f42015-11-19 13:28:47 -0800129
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700130.. method:: loop.stop()
Victor Stinnerea3183f2013-12-03 01:08:00 +0100131
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700132 Stop the event loop.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100133
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700134.. method:: loop.is_running()
Victor Stinnerea3183f2013-12-03 01:08:00 +0100135
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700136 Return ``True`` if the event loop is currently running.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100137
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700138.. method:: loop.is_closed()
Victor Stinnerea3183f2013-12-03 01:08:00 +0100139
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700140 Return ``True`` if the event loop was closed.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100141
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700142.. method:: loop.close()
Victor Stinnerea3183f2013-12-03 01:08:00 +0100143
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700144 Close the event loop.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100145
Andriy Maletskyb83d9172018-10-29 23:39:21 +0200146 The loop must not be running when this function is called.
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700147 Any pending callbacks will be discarded.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100148
Łukasz Langa7f9a2ae2019-06-04 13:03:20 +0200149 This method clears all queues and shuts down the executor, but does
150 not wait for the executor to finish.
Guido van Rossum41f69f42015-11-19 13:28:47 -0800151
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700152 This method is idempotent and irreversible. No other methods
153 should be called after the event loop is closed.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100154
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700155.. coroutinemethod:: loop.shutdown_asyncgens()
Yury Selivanov03660042016-12-15 17:36:05 -0500156
157 Schedule all currently open :term:`asynchronous generator` objects to
158 close with an :meth:`~agen.aclose()` call. After calling this method,
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700159 the event loop will issue a warning if a new asynchronous generator
Carol Willing5b7cbd62018-09-12 17:05:17 -0700160 is iterated. This should be used to reliably finalize all scheduled
Yury Selivanovac94e382018-09-17 23:58:00 -0400161 asynchronous generators.
Carol Willing5b7cbd62018-09-12 17:05:17 -0700162
Yury Selivanovac94e382018-09-17 23:58:00 -0400163 Note that there is no need to call this function when
164 :func:`asyncio.run` is used.
165
166 Example::
Yury Selivanov03660042016-12-15 17:36:05 -0500167
168 try:
169 loop.run_forever()
170 finally:
171 loop.run_until_complete(loop.shutdown_asyncgens())
172 loop.close()
173
174 .. versionadded:: 3.6
175
176
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700177Scheduling callbacks
178^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +0100179
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700180.. method:: loop.call_soon(callback, *args, context=None)
Victor Stinner8464c242014-11-28 13:15:41 +0100181
Carol Willing5b7cbd62018-09-12 17:05:17 -0700182 Schedule a *callback* to be called with *args* arguments at
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700183 the next iteration of the event loop.
Victor Stinner8464c242014-11-28 13:15:41 +0100184
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700185 Callbacks are called in the order in which they are registered.
186 Each callback will be called exactly once.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100187
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700188 An optional keyword-only *context* argument allows specifying a
189 custom :class:`contextvars.Context` for the *callback* to run in.
190 The current context is used when no *context* is provided.
Yury Selivanov28b91782018-05-23 13:35:04 -0400191
Yury Selivanov1096f762015-06-25 13:49:52 -0400192 An instance of :class:`asyncio.Handle` is returned, which can be
Carol Willing5b7cbd62018-09-12 17:05:17 -0700193 used later to cancel the callback.
194
195 This method is not thread-safe.
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500196
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700197.. method:: loop.call_soon_threadsafe(callback, *args, context=None)
Victor Stinner8464c242014-11-28 13:15:41 +0100198
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700199 A thread-safe variant of :meth:`call_soon`. Must be used to
200 schedule callbacks *from another thread*.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100201
Victor Stinner83704962015-02-25 14:24:15 +0100202 See the :ref:`concurrency and multithreading <asyncio-multithreading>`
203 section of the documentation.
204
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700205.. versionchanged:: 3.7
206 The *context* keyword-only parameter was added. See :pep:`567`
207 for more details.
208
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400209.. _asyncio-pass-keywords:
210
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700211.. note::
212
Carol Willing5b7cbd62018-09-12 17:05:17 -0700213 Most :mod:`asyncio` scheduling functions don't allow passing
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400214 keyword arguments. To do that, use :func:`functools.partial`::
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700215
Carol Willing5b7cbd62018-09-12 17:05:17 -0700216 # will schedule "print("Hello", flush=True)"
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700217 loop.call_soon(
218 functools.partial(print, "Hello", flush=True))
219
220 Using partial objects is usually more convenient than using lambdas,
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400221 as asyncio can render partial objects better in debug and error
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700222 messages.
Yury Selivanov28b91782018-05-23 13:35:04 -0400223
Victor Stinnerea3183f2013-12-03 01:08:00 +0100224
Victor Stinner45b27ed2014-02-01 02:36:43 +0100225.. _asyncio-delayed-calls:
226
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700227Scheduling delayed callbacks
228^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +0100229
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700230Event loop provides mechanisms to schedule callback functions
231to be called at some point in the future. Event loop uses monotonic
232clocks to track time.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100233
Victor Stinner45b27ed2014-02-01 02:36:43 +0100234
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700235.. method:: loop.call_later(delay, callback, *args, context=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100236
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700237 Schedule *callback* to be called after the given *delay*
238 number of seconds (can be either an int or a float).
Victor Stinnerea3183f2013-12-03 01:08:00 +0100239
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700240 An instance of :class:`asyncio.TimerHandle` is returned which can
241 be used to cancel the callback.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100242
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700243 *callback* will be called exactly once. If two callbacks are
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400244 scheduled for exactly the same time, the order in which they
245 are called is undefined.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100246
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700247 The optional positional *args* will be passed to the callback when
248 it is called. If you want the callback to be called with keyword
249 arguments use :func:`functools.partial`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100250
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700251 An optional keyword-only *context* argument allows specifying a
252 custom :class:`contextvars.Context` for the *callback* to run in.
253 The current context is used when no *context* is provided.
Victor Stinner8464c242014-11-28 13:15:41 +0100254
Yury Selivanov28b91782018-05-23 13:35:04 -0400255 .. versionchanged:: 3.7
256 The *context* keyword-only parameter was added. See :pep:`567`
257 for more details.
258
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400259 .. versionchanged:: 3.8
260 In Python 3.7 and earlier with the default event loop implementation,
261 the *delay* could not exceed one day.
262 This has been fixed in Python 3.8.
263
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700264.. method:: loop.call_at(when, callback, *args, context=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100265
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700266 Schedule *callback* to be called at the given absolute timestamp
267 *when* (an int or a float), using the same time reference as
268 :meth:`loop.time`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100269
270 This method's behavior is the same as :meth:`call_later`.
271
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700272 An instance of :class:`asyncio.TimerHandle` is returned which can
273 be used to cancel the callback.
Victor Stinner8464c242014-11-28 13:15:41 +0100274
Yury Selivanov28b91782018-05-23 13:35:04 -0400275 .. versionchanged:: 3.7
276 The *context* keyword-only parameter was added. See :pep:`567`
277 for more details.
278
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400279 .. versionchanged:: 3.8
280 In Python 3.7 and earlier with the default event loop implementation,
281 the difference between *when* and the current time could not exceed
282 one day. This has been fixed in Python 3.8.
283
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700284.. method:: loop.time()
Victor Stinnerea3183f2013-12-03 01:08:00 +0100285
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700286 Return the current time, as a :class:`float` value, according to
287 the event loop's internal monotonic clock.
288
289.. note::
Enrico Alarico Carbognani7e954e72019-04-18 14:43:14 +0200290 .. versionchanged:: 3.8
291 In Python 3.7 and earlier timeouts (relative *delay* or absolute *when*)
292 should not exceed one day. This has been fixed in Python 3.8.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100293
Victor Stinner3e09e322013-12-03 01:22:06 +0100294.. seealso::
295
296 The :func:`asyncio.sleep` function.
297
Victor Stinnerea3183f2013-12-03 01:08:00 +0100298
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700299Creating Futures and Tasks
300^^^^^^^^^^^^^^^^^^^^^^^^^^
Yury Selivanov950204d2016-05-16 16:23:00 -0400301
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700302.. method:: loop.create_future()
Yury Selivanov950204d2016-05-16 16:23:00 -0400303
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700304 Create an :class:`asyncio.Future` object attached to the event loop.
Yury Selivanov950204d2016-05-16 16:23:00 -0400305
Carol Willing5b7cbd62018-09-12 17:05:17 -0700306 This is the preferred way to create Futures in asyncio. This lets
307 third-party event loops provide alternative implementations of
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700308 the Future object (with better performance or instrumentation).
Yury Selivanov950204d2016-05-16 16:23:00 -0400309
310 .. versionadded:: 3.5.2
311
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700312.. method:: loop.create_task(coro, \*, name=None)
Yury Selivanov950204d2016-05-16 16:23:00 -0400313
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700314 Schedule the execution of a :ref:`coroutine`.
315 Return a :class:`Task` object.
Victor Stinner530ef2f2014-07-08 12:39:10 +0200316
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700317 Third-party event loops can use their own subclass of :class:`Task`
318 for interoperability. In this case, the result type is a subclass
319 of :class:`Task`.
Victor Stinner530ef2f2014-07-08 12:39:10 +0200320
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700321 If the *name* argument is provided and not ``None``, it is set as
322 the name of the task using :meth:`Task.set_name`.
Victor Stinner530ef2f2014-07-08 12:39:10 +0200323
Alex Grönholmcca4eec2018-08-09 00:06:47 +0300324 .. versionchanged:: 3.8
325 Added the ``name`` parameter.
326
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700327.. method:: loop.set_task_factory(factory)
Yury Selivanov71854612015-05-11 16:28:27 -0400328
329 Set a task factory that will be used by
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700330 :meth:`loop.create_task`.
Yury Selivanov71854612015-05-11 16:28:27 -0400331
332 If *factory* is ``None`` the default task factory will be set.
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400333 Otherwise, *factory* must be a *callable* with the signature matching
334 ``(loop, coro)``, where *loop* is a reference to the active
335 event loop, and *coro* is a coroutine object. The callable
336 must return a :class:`asyncio.Future`-compatible object.
Yury Selivanov71854612015-05-11 16:28:27 -0400337
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700338.. method:: loop.get_task_factory()
Yury Selivanov71854612015-05-11 16:28:27 -0400339
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700340 Return a task factory or ``None`` if the default one is in use.
Yury Selivanov71854612015-05-11 16:28:27 -0400341
Victor Stinner530ef2f2014-07-08 12:39:10 +0200342
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700343Opening network connections
344^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +0100345
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700346.. coroutinemethod:: loop.create_connection(protocol_factory, \
347 host=None, port=None, \*, ssl=None, \
348 family=0, proto=0, flags=0, sock=None, \
349 local_addr=None, server_hostname=None, \
350 ssl_handshake_timeout=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100351
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700352 Open a streaming transport connection to a given
353 address specified by *host* and *port*.
354
355 The socket family can be either :py:data:`~socket.AF_INET` or
356 :py:data:`~socket.AF_INET6` depending on *host* (or the *family*
357 argument, if provided).
358
359 The socket type will be :py:data:`~socket.SOCK_STREAM`.
360
361 *protocol_factory* must be a callable returning an
362 :ref:`asyncio protocol <asyncio-protocol>` implementation.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100363
Yury Selivanov19a44f62017-12-14 20:53:26 -0500364 This method will try to establish the connection in the background.
365 When successful, it returns a ``(transport, protocol)`` pair.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100366
367 The chronological synopsis of the underlying operation is as follows:
368
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700369 #. The connection is established and a :ref:`transport <asyncio-transport>`
370 is created for it.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100371
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700372 #. *protocol_factory* is called without arguments and is expected to
373 return a :ref:`protocol <asyncio-protocol>` instance.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100374
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700375 #. The protocol instance is coupled with the transport by calling its
376 :meth:`~BaseProtocol.connection_made` method.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100377
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700378 #. A ``(transport, protocol)`` tuple is returned on success.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100379
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700380 The created transport is an implementation-dependent bidirectional
381 stream.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100382
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700383 Other arguments:
Victor Stinnerea3183f2013-12-03 01:08:00 +0100384
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400385 * *ssl*: if given and not false, a SSL/TLS transport is created
Victor Stinnerea3183f2013-12-03 01:08:00 +0100386 (by default a plain TCP transport is created). If *ssl* is
387 a :class:`ssl.SSLContext` object, this context is used to create
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400388 the transport; if *ssl* is :const:`True`, a default context returned
389 from :func:`ssl.create_default_context` is used.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100390
Berker Peksag9c1dba22014-09-28 00:00:58 +0300391 .. seealso:: :ref:`SSL/TLS security considerations <ssl-security>`
Antoine Pitrouc5e075f2014-03-22 18:19:11 +0100392
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400393 * *server_hostname* sets or overrides the hostname that the target
394 server's certificate will be matched against. Should only be passed
395 if *ssl* is not ``None``. By default the value of the *host* argument
Victor Stinnerea3183f2013-12-03 01:08:00 +0100396 is used. If *host* is empty, there is no default and you must pass a
397 value for *server_hostname*. If *server_hostname* is an empty
398 string, hostname matching is disabled (which is a serious security
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400399 risk, allowing for potential man-in-the-middle attacks).
Victor Stinnerea3183f2013-12-03 01:08:00 +0100400
401 * *family*, *proto*, *flags* are the optional address family, protocol
402 and flags to be passed through to getaddrinfo() for *host* resolution.
403 If given, these should all be integers from the corresponding
404 :mod:`socket` module constants.
405
twisteroid ambassador88f07a82019-05-05 19:14:35 +0800406 * *happy_eyeballs_delay*, if given, enables Happy Eyeballs for this
407 connection. It should
408 be a floating-point number representing the amount of time in seconds
409 to wait for a connection attempt to complete, before starting the next
410 attempt in parallel. This is the "Connection Attempt Delay" as defined
411 in :rfc:`8305`. A sensible default value recommended by the RFC is ``0.25``
412 (250 milliseconds).
413
414 * *interleave* controls address reordering when a host name resolves to
415 multiple IP addresses.
416 If ``0`` or unspecified, no reordering is done, and addresses are
417 tried in the order returned by :meth:`getaddrinfo`. If a positive integer
418 is specified, the addresses are interleaved by address family, and the
419 given integer is interpreted as "First Address Family Count" as defined
420 in :rfc:`8305`. The default is ``0`` if *happy_eyeballs_delay* is not
421 specified, and ``1`` if it is.
422
Victor Stinnerea3183f2013-12-03 01:08:00 +0100423 * *sock*, if given, should be an existing, already connected
424 :class:`socket.socket` object to be used by the transport.
twisteroid ambassador88f07a82019-05-05 19:14:35 +0800425 If *sock* is given, none of *host*, *port*, *family*, *proto*, *flags*,
426 *happy_eyeballs_delay*, *interleave*
Victor Stinnerea3183f2013-12-03 01:08:00 +0100427 and *local_addr* should be specified.
428
429 * *local_addr*, if given, is a ``(local_host, local_port)`` tuple used
430 to bind the socket to locally. The *local_host* and *local_port*
Carol Willing5b7cbd62018-09-12 17:05:17 -0700431 are looked up using ``getaddrinfo()``, similarly to *host* and *port*.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100432
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400433 * *ssl_handshake_timeout* is (for a TLS connection) the time in seconds
434 to wait for the TLS handshake to complete before aborting the connection.
Yury Selivanov96026432018-06-04 11:32:35 -0400435 ``60.0`` seconds if ``None`` (default).
Neil Aspinallf7686c12017-12-19 19:45:42 +0000436
twisteroid ambassador88f07a82019-05-05 19:14:35 +0800437 .. versionadded:: 3.8
438
439 The *happy_eyeballs_delay* and *interleave* parameters.
440
Neil Aspinallf7686c12017-12-19 19:45:42 +0000441 .. versionadded:: 3.7
442
443 The *ssl_handshake_timeout* parameter.
444
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700445 .. versionchanged:: 3.6
446
447 The socket option :py:data:`~socket.TCP_NODELAY` is set by default
448 for all TCP connections.
449
Victor Stinner60208a12015-09-15 22:41:52 +0200450 .. versionchanged:: 3.5
451
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400452 Added support for SSL/TLS in :class:`ProactorEventLoop`.
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200453
Victor Stinnerc8ea8132014-01-23 11:02:09 +0100454 .. seealso::
455
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700456 The :func:`open_connection` function is a high-level alternative
457 API. It returns a pair of (:class:`StreamReader`, :class:`StreamWriter`)
458 that can be used directly in async/await code.
Victor Stinnerc8ea8132014-01-23 11:02:09 +0100459
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700460.. coroutinemethod:: loop.create_datagram_endpoint(protocol_factory, \
461 local_addr=None, remote_addr=None, \*, \
462 family=0, proto=0, flags=0, \
463 reuse_address=None, reuse_port=None, \
464 allow_broadcast=None, sock=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100465
Miss Islington (bot)79c29742019-12-09 06:39:54 -0800466 .. note::
467 The parameter *reuse_address* is no longer supported, as using
468 :py:data:`~sockets.SO_REUSEADDR` poses a significant security concern for
469 UDP. Explicitly passing ``reuse_address=True`` will raise an exception.
470
471 When multiple processes with differing UIDs assign sockets to an
Miss Islington (bot)7eb8c6d2019-12-23 07:52:29 -0800472 identical UDP socket address with ``SO_REUSEADDR``, incoming packets can
Miss Islington (bot)79c29742019-12-09 06:39:54 -0800473 become randomly distributed among the sockets.
474
475 For supported platforms, *reuse_port* can be used as a replacement for
476 similar functionality. With *reuse_port*,
477 :py:data:`~sockets.SO_REUSEPORT` is used instead, which specifically
478 prevents processes with differing UIDs from assigning sockets to the same
479 socket address.
480
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700481 Create a datagram connection.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100482
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700483 The socket family can be either :py:data:`~socket.AF_INET`,
484 :py:data:`~socket.AF_INET6`, or :py:data:`~socket.AF_UNIX`,
485 depending on *host* (or the *family* argument, if provided).
Victor Stinnera6919aa2014-02-19 13:32:34 +0100486
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700487 The socket type will be :py:data:`~socket.SOCK_DGRAM`.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100488
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700489 *protocol_factory* must be a callable returning a
490 :ref:`protocol <asyncio-protocol>` implementation.
491
492 A tuple of ``(transport, protocol)`` is returned on success.
493
494 Other arguments:
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700495
496 * *local_addr*, if given, is a ``(local_host, local_port)`` tuple used
497 to bind the socket to locally. The *local_host* and *local_port*
498 are looked up using :meth:`getaddrinfo`.
499
500 * *remote_addr*, if given, is a ``(remote_host, remote_port)`` tuple used
501 to connect the socket to a remote address. The *remote_host* and
502 *remote_port* are looked up using :meth:`getaddrinfo`.
503
504 * *family*, *proto*, *flags* are the optional address family, protocol
505 and flags to be passed through to :meth:`getaddrinfo` for *host*
506 resolution. If given, these should all be integers from the
507 corresponding :mod:`socket` module constants.
508
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700509 * *reuse_port* tells the kernel to allow this endpoint to be bound to the
510 same port as other existing endpoints are bound to, so long as they all
511 set this flag when being created. This option is not supported on Windows
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400512 and some Unixes. If the :py:data:`~socket.SO_REUSEPORT` constant is not
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700513 defined then this capability is unsupported.
514
515 * *allow_broadcast* tells the kernel to allow this endpoint to send
516 messages to the broadcast address.
517
518 * *sock* can optionally be specified in order to use a preexisting,
519 already connected, :class:`socket.socket` object to be used by the
520 transport. If specified, *local_addr* and *remote_addr* should be omitted
521 (must be :const:`None`).
Victor Stinnera6919aa2014-02-19 13:32:34 +0100522
Victor Stinnerc7edffd2014-10-12 11:24:26 +0200523 See :ref:`UDP echo client protocol <asyncio-udp-echo-client-protocol>` and
524 :ref:`UDP echo server protocol <asyncio-udp-echo-server-protocol>` examples.
525
Romuald Brunet0ded5802018-05-14 18:22:00 +0200526 .. versionchanged:: 3.4.4
527 The *family*, *proto*, *flags*, *reuse_address*, *reuse_port,
528 *allow_broadcast*, and *sock* parameters were added.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100529
Miss Islington (bot)79c29742019-12-09 06:39:54 -0800530 .. versionchanged:: 3.8.1
531 The *reuse_address* parameter is no longer supported due to security
532 concerns.
533
Andrew Svetlovbafd4b52019-05-28 12:52:15 +0300534 .. versionchanged:: 3.8
535 Added support for Windows.
536
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700537.. coroutinemethod:: loop.create_unix_connection(protocol_factory, \
538 path=None, \*, ssl=None, sock=None, \
539 server_hostname=None, ssl_handshake_timeout=None)
Victor Stinnera6919aa2014-02-19 13:32:34 +0100540
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400541 Create a Unix connection.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100542
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700543 The socket family will be :py:data:`~socket.AF_UNIX`; socket
544 type will be :py:data:`~socket.SOCK_STREAM`.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100545
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700546 A tuple of ``(transport, protocol)`` is returned on success.
Guido van Rossum9e80eeb2016-11-03 14:17:25 -0700547
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400548 *path* is the name of a Unix domain socket and is required,
549 unless a *sock* parameter is specified. Abstract Unix sockets,
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700550 :class:`str`, :class:`bytes`, and :class:`~pathlib.Path` paths are
551 supported.
552
553 See the documentation of the :meth:`loop.create_connection` method
554 for information about arguments to this method.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100555
Cheryl Sabella2d6097d2018-10-12 10:55:20 -0400556 .. availability:: Unix.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100557
Neil Aspinallf7686c12017-12-19 19:45:42 +0000558 .. versionadded:: 3.7
559
560 The *ssl_handshake_timeout* parameter.
561
Yury Selivanov423fd362017-11-20 17:26:28 -0500562 .. versionchanged:: 3.7
563
Elvis Pranskevichusc0d062f2018-06-08 11:36:00 -0400564 The *path* parameter can now be a :term:`path-like object`.
Yury Selivanov423fd362017-11-20 17:26:28 -0500565
Victor Stinnera6919aa2014-02-19 13:32:34 +0100566
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700567Creating network servers
568^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +0100569
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700570.. coroutinemethod:: loop.create_server(protocol_factory, \
571 host=None, port=None, \*, \
572 family=socket.AF_UNSPEC, \
573 flags=socket.AI_PASSIVE, \
574 sock=None, backlog=100, ssl=None, \
575 reuse_address=None, reuse_port=None, \
576 ssl_handshake_timeout=None, start_serving=True)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100577
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700578 Create a TCP server (socket type :data:`~socket.SOCK_STREAM`) listening
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400579 on *port* of the *host* address.
Victor Stinner33f6abe2014-10-12 20:36:04 +0200580
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700581 Returns a :class:`Server` object.
Victor Stinner33f6abe2014-10-12 20:36:04 +0200582
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700583 Arguments:
Victor Stinner33f6abe2014-10-12 20:36:04 +0200584
Bumsik Kim5cc583d2018-09-16 19:40:44 -0400585 * *protocol_factory* must be a callable returning a
586 :ref:`protocol <asyncio-protocol>` implementation.
587
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400588 * The *host* parameter can be set to several types which determine where
589 the server would be listening:
590
591 - If *host* is a string, the TCP server is bound to a single network
592 interface specified by *host*.
593
594 - If *host* is a sequence of strings, the TCP server is bound to all
595 network interfaces specified by the sequence.
596
597 - If *host* is an empty string or ``None``, all interfaces are
598 assumed and a list of multiple sockets will be returned (most likely
599 one for IPv4 and another one for IPv6).
Victor Stinner33f6abe2014-10-12 20:36:04 +0200600
601 * *family* can be set to either :data:`socket.AF_INET` or
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700602 :data:`~socket.AF_INET6` to force the socket to use IPv4 or IPv6.
Carol Willing5b7cbd62018-09-12 17:05:17 -0700603 If not set, the *family* will be determined from host name
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700604 (defaults to :data:`~socket.AF_UNSPEC`).
Victor Stinner33f6abe2014-10-12 20:36:04 +0200605
606 * *flags* is a bitmask for :meth:`getaddrinfo`.
607
608 * *sock* can optionally be specified in order to use a preexisting
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400609 socket object. If specified, *host* and *port* must not be specified.
Victor Stinner33f6abe2014-10-12 20:36:04 +0200610
611 * *backlog* is the maximum number of queued connections passed to
612 :meth:`~socket.socket.listen` (defaults to 100).
613
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400614 * *ssl* can be set to an :class:`~ssl.SSLContext` instance to enable
615 TLS over the accepted connections.
Victor Stinner33f6abe2014-10-12 20:36:04 +0200616
617 * *reuse_address* tells the kernel to reuse a local socket in
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700618 ``TIME_WAIT`` state, without waiting for its natural timeout to
Serhiy Storchaka4adf01c2016-10-19 18:30:05 +0300619 expire. If not specified will automatically be set to ``True`` on
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400620 Unix.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100621
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700622 * *reuse_port* tells the kernel to allow this endpoint to be bound to the
623 same port as other existing endpoints are bound to, so long as they all
624 set this flag when being created. This option is not supported on
625 Windows.
626
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400627 * *ssl_handshake_timeout* is (for a TLS server) the time in seconds to wait
628 for the TLS handshake to complete before aborting the connection.
Yury Selivanov96026432018-06-04 11:32:35 -0400629 ``60.0`` seconds if ``None`` (default).
Neil Aspinallf7686c12017-12-19 19:45:42 +0000630
Yury Selivanovc9070d02018-01-25 18:08:09 -0500631 * *start_serving* set to ``True`` (the default) causes the created server
632 to start accepting connections immediately. When set to ``False``,
633 the user should await on :meth:`Server.start_serving` or
634 :meth:`Server.serve_forever` to make the server to start accepting
635 connections.
636
Neil Aspinallf7686c12017-12-19 19:45:42 +0000637 .. versionadded:: 3.7
638
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700639 Added *ssl_handshake_timeout* and *start_serving* parameters.
640
641 .. versionchanged:: 3.6
642
643 The socket option :py:data:`~socket.TCP_NODELAY` is set by default
644 for all TCP connections.
Neil Aspinallf7686c12017-12-19 19:45:42 +0000645
Victor Stinner60208a12015-09-15 22:41:52 +0200646 .. versionchanged:: 3.5
647
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400648 Added support for SSL/TLS in :class:`ProactorEventLoop`.
Victor Stinnerc8ea8132014-01-23 11:02:09 +0100649
Victor Stinner7b58a2b2015-09-21 18:41:05 +0200650 .. versionchanged:: 3.5.1
Victor Stinner5e4a7d82015-09-21 18:33:43 +0200651
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700652 The *host* parameter can be a sequence of strings.
653
654 .. seealso::
655
656 The :func:`start_server` function is a higher-level alternative API
657 that returns a pair of :class:`StreamReader` and :class:`StreamWriter`
658 that can be used in an async/await code.
Victor Stinner5e4a7d82015-09-21 18:33:43 +0200659
Victor Stinnerea3183f2013-12-03 01:08:00 +0100660
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700661.. coroutinemethod:: loop.create_unix_server(protocol_factory, path=None, \
662 \*, sock=None, backlog=100, ssl=None, \
663 ssl_handshake_timeout=None, start_serving=True)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100664
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700665 Similar to :meth:`loop.create_server` but works with the
666 :py:data:`~socket.AF_UNIX` socket family.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100667
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400668 *path* is the name of a Unix domain socket, and is required,
669 unless a *sock* argument is provided. Abstract Unix sockets,
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700670 :class:`str`, :class:`bytes`, and :class:`~pathlib.Path` paths
671 are supported.
Yury Selivanov423fd362017-11-20 17:26:28 -0500672
Bumsik Kim5cc583d2018-09-16 19:40:44 -0400673 See the documentation of the :meth:`loop.create_server` method
674 for information about arguments to this method.
675
Cheryl Sabella2d6097d2018-10-12 10:55:20 -0400676 .. availability:: Unix.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100677
Neil Aspinallf7686c12017-12-19 19:45:42 +0000678 .. versionadded:: 3.7
679
Elvis Pranskevichusc0d062f2018-06-08 11:36:00 -0400680 The *ssl_handshake_timeout* and *start_serving* parameters.
Neil Aspinallf7686c12017-12-19 19:45:42 +0000681
Yury Selivanov423fd362017-11-20 17:26:28 -0500682 .. versionchanged:: 3.7
683
684 The *path* parameter can now be a :class:`~pathlib.Path` object.
685
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700686.. coroutinemethod:: loop.connect_accepted_socket(protocol_factory, \
687 sock, \*, ssl=None, ssl_handshake_timeout=None)
Yury Selivanov3b3a1412016-11-07 15:35:25 -0500688
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700689 Wrap an already accepted connection into a transport/protocol pair.
Yury Selivanov3b3a1412016-11-07 15:35:25 -0500690
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700691 This method can be used by servers that accept connections outside
692 of asyncio but that use asyncio to handle them.
Yury Selivanov3b3a1412016-11-07 15:35:25 -0500693
694 Parameters:
695
Bumsik Kim5cc583d2018-09-16 19:40:44 -0400696 * *protocol_factory* must be a callable returning a
697 :ref:`protocol <asyncio-protocol>` implementation.
698
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700699 * *sock* is a preexisting socket object returned from
700 :meth:`socket.accept <socket.socket.accept>`.
Yury Selivanov3b3a1412016-11-07 15:35:25 -0500701
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700702 * *ssl* can be set to an :class:`~ssl.SSLContext` to enable SSL over
703 the accepted connections.
Yury Selivanov3b3a1412016-11-07 15:35:25 -0500704
Neil Aspinallf7686c12017-12-19 19:45:42 +0000705 * *ssl_handshake_timeout* is (for an SSL connection) the time in seconds to
706 wait for the SSL handshake to complete before aborting the connection.
Yury Selivanov96026432018-06-04 11:32:35 -0400707 ``60.0`` seconds if ``None`` (default).
Neil Aspinallf7686c12017-12-19 19:45:42 +0000708
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700709 Returns a ``(transport, protocol)`` pair.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100710
Neil Aspinallf7686c12017-12-19 19:45:42 +0000711 .. versionadded:: 3.7
712
713 The *ssl_handshake_timeout* parameter.
714
AraHaan431665b2017-11-21 11:06:26 -0500715 .. versionadded:: 3.5.3
716
717
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700718Transferring files
719^^^^^^^^^^^^^^^^^^
Andrew Svetlov7c684072018-01-27 21:22:47 +0200720
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700721.. coroutinemethod:: loop.sendfile(transport, file, \
722 offset=0, count=None, *, fallback=True)
Andrew Svetlov7c684072018-01-27 21:22:47 +0200723
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700724 Send a *file* over a *transport*. Return the total number of bytes
725 sent.
Andrew Svetlov7c684072018-01-27 21:22:47 +0200726
727 The method uses high-performance :meth:`os.sendfile` if available.
728
729 *file* must be a regular file object opened in binary mode.
730
731 *offset* tells from where to start reading the file. If specified,
732 *count* is the total number of bytes to transmit as opposed to
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400733 sending the file until EOF is reached. File position is always updated,
734 even when this method raises an error, and
735 :meth:`file.tell() <io.IOBase.tell>` can be used to obtain the actual
736 number of bytes sent.
Andrew Svetlov7c684072018-01-27 21:22:47 +0200737
738 *fallback* set to ``True`` makes asyncio to manually read and send
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700739 the file when the platform does not support the sendfile system call
Andrew Svetlov7c684072018-01-27 21:22:47 +0200740 (e.g. Windows or SSL socket on Unix).
741
742 Raise :exc:`SendfileNotAvailableError` if the system does not support
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400743 the *sendfile* syscall and *fallback* is ``False``.
Andrew Svetlov7c684072018-01-27 21:22:47 +0200744
745 .. versionadded:: 3.7
746
747
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500748TLS Upgrade
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700749^^^^^^^^^^^
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500750
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700751.. coroutinemethod:: loop.start_tls(transport, protocol, \
752 sslcontext, \*, server_side=False, \
753 server_hostname=None, ssl_handshake_timeout=None)
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500754
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700755 Upgrade an existing transport-based connection to TLS.
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500756
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700757 Return a new transport instance, that the *protocol* must start using
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500758 immediately after the *await*. The *transport* instance passed to
759 the *start_tls* method should never be used again.
760
761 Parameters:
762
763 * *transport* and *protocol* instances that methods like
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700764 :meth:`~loop.create_server` and
765 :meth:`~loop.create_connection` return.
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500766
767 * *sslcontext*: a configured instance of :class:`~ssl.SSLContext`.
768
769 * *server_side* pass ``True`` when a server-side connection is being
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700770 upgraded (like the one created by :meth:`~loop.create_server`).
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500771
772 * *server_hostname*: sets or overrides the host name that the target
773 server's certificate will be matched against.
774
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400775 * *ssl_handshake_timeout* is (for a TLS connection) the time in seconds to
776 wait for the TLS handshake to complete before aborting the connection.
Yury Selivanov96026432018-06-04 11:32:35 -0400777 ``60.0`` seconds if ``None`` (default).
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500778
779 .. versionadded:: 3.7
780
781
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700782Watching file descriptors
783^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerc1567df2014-02-08 23:22:58 +0100784
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700785.. method:: loop.add_reader(fd, callback, \*args)
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200786
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400787 Start monitoring the *fd* file descriptor for read availability and
788 invoke *callback* with the specified arguments once *fd* is available for
789 reading.
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200790
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700791.. method:: loop.remove_reader(fd)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100792
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400793 Stop monitoring the *fd* file descriptor for read availability.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100794
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700795.. method:: loop.add_writer(fd, callback, \*args)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100796
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400797 Start monitoring the *fd* file descriptor for write availability and
798 invoke *callback* with the specified arguments once *fd* is available for
799 writing.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100800
Yury Selivanove247b462018-09-20 12:43:59 -0400801 Use :func:`functools.partial` :ref:`to pass keyword arguments
Naglis17473342018-12-04 09:31:15 +0200802 <asyncio-pass-keywords>` to *callback*.
Victor Stinner8464c242014-11-28 13:15:41 +0100803
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700804.. method:: loop.remove_writer(fd)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100805
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400806 Stop monitoring the *fd* file descriptor for write availability.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100807
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700808See also :ref:`Platform Support <asyncio-platform-support>` section
809for some limitations of these methods.
Victor Stinner04e6df32014-10-11 16:16:27 +0200810
Victor Stinnerc1567df2014-02-08 23:22:58 +0100811
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700812Working with socket objects directly
813^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerc1567df2014-02-08 23:22:58 +0100814
Carol Willing5b7cbd62018-09-12 17:05:17 -0700815In general, protocol implementations that use transport-based APIs
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700816such as :meth:`loop.create_connection` and :meth:`loop.create_server`
817are faster than implementations that work with sockets directly.
Carol Willing5b7cbd62018-09-12 17:05:17 -0700818However, there are some use cases when performance is not critical, and
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700819working with :class:`~socket.socket` objects directly is more
820convenient.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100821
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700822.. coroutinemethod:: loop.sock_recv(sock, nbytes)
Yury Selivanov55c50842016-06-08 12:48:15 -0400823
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400824 Receive up to *nbytes* from *sock*. Asynchronous version of
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700825 :meth:`socket.recv() <socket.socket.recv>`.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100826
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400827 Return the received data as a bytes object.
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700828
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400829 *sock* must be a non-blocking socket.
Victor Stinnerec2ce092014-07-29 23:12:22 +0200830
Yury Selivanov19a44f62017-12-14 20:53:26 -0500831 .. versionchanged:: 3.7
Carol Willing5b7cbd62018-09-12 17:05:17 -0700832 Even though this method was always documented as a coroutine
833 method, releases before Python 3.7 returned a :class:`Future`.
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700834 Since Python 3.7 this is an ``async def`` method.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100835
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700836.. coroutinemethod:: loop.sock_recv_into(sock, buf)
Antoine Pitrou525f40d2017-10-19 21:46:40 +0200837
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400838 Receive data from *sock* into the *buf* buffer. Modeled after the blocking
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700839 :meth:`socket.recv_into() <socket.socket.recv_into>` method.
Antoine Pitrou525f40d2017-10-19 21:46:40 +0200840
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700841 Return the number of bytes written to the buffer.
Antoine Pitrou525f40d2017-10-19 21:46:40 +0200842
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400843 *sock* must be a non-blocking socket.
Antoine Pitrou525f40d2017-10-19 21:46:40 +0200844
Antoine Pitrou525f40d2017-10-19 21:46:40 +0200845 .. versionadded:: 3.7
846
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700847.. coroutinemethod:: loop.sock_sendall(sock, data)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100848
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400849 Send *data* to the *sock* socket. Asynchronous version of
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700850 :meth:`socket.sendall() <socket.socket.sendall>`.
Yury Selivanov55c50842016-06-08 12:48:15 -0400851
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400852 This method continues to send to the socket until either all data
853 in *data* has been sent or an error occurs. ``None`` is returned
Carol Willing5b7cbd62018-09-12 17:05:17 -0700854 on success. On error, an exception is raised. Additionally, there is no way
855 to determine how much data, if any, was successfully processed by the
856 receiving end of the connection.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100857
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400858 *sock* must be a non-blocking socket.
Victor Stinnerec2ce092014-07-29 23:12:22 +0200859
Yury Selivanov19a44f62017-12-14 20:53:26 -0500860 .. versionchanged:: 3.7
861 Even though the method was always documented as a coroutine
862 method, before Python 3.7 it returned an :class:`Future`.
863 Since Python 3.7, this is an ``async def`` method.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100864
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700865.. coroutinemethod:: loop.sock_connect(sock, address)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100866
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400867 Connect *sock* to a remote socket at *address*.
Victor Stinner1b0580b2014-02-13 09:24:37 +0100868
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700869 Asynchronous version of :meth:`socket.connect() <socket.socket.connect>`.
870
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400871 *sock* must be a non-blocking socket.
Victor Stinnerec2ce092014-07-29 23:12:22 +0200872
Yury Selivanov55c50842016-06-08 12:48:15 -0400873 .. versionchanged:: 3.5.2
874 ``address`` no longer needs to be resolved. ``sock_connect``
875 will try to check if the *address* is already resolved by calling
876 :func:`socket.inet_pton`. If not,
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700877 :meth:`loop.getaddrinfo` will be used to resolve the
Yury Selivanov55c50842016-06-08 12:48:15 -0400878 *address*.
879
Victor Stinnerc1567df2014-02-08 23:22:58 +0100880 .. seealso::
881
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700882 :meth:`loop.create_connection`
Yury Selivanov55c50842016-06-08 12:48:15 -0400883 and :func:`asyncio.open_connection() <open_connection>`.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100884
885
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700886.. coroutinemethod:: loop.sock_accept(sock)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100887
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700888 Accept a connection. Modeled after the blocking
889 :meth:`socket.accept() <socket.socket.accept>` method.
Yury Selivanov55c50842016-06-08 12:48:15 -0400890
891 The socket must be bound to an address and listening
Victor Stinnerc1567df2014-02-08 23:22:58 +0100892 for connections. The return value is a pair ``(conn, address)`` where *conn*
893 is a *new* socket object usable to send and receive data on the connection,
894 and *address* is the address bound to the socket on the other end of the
895 connection.
896
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400897 *sock* must be a non-blocking socket.
Victor Stinnerec2ce092014-07-29 23:12:22 +0200898
Yury Selivanov19a44f62017-12-14 20:53:26 -0500899 .. versionchanged:: 3.7
900 Even though the method was always documented as a coroutine
901 method, before Python 3.7 it returned a :class:`Future`.
902 Since Python 3.7, this is an ``async def`` method.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100903
904 .. seealso::
905
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700906 :meth:`loop.create_server` and :func:`start_server`.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100907
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700908.. coroutinemethod:: loop.sock_sendfile(sock, file, offset=0, count=None, \
909 \*, fallback=True)
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200910
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700911 Send a file using high-performance :mod:`os.sendfile` if possible.
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400912 Return the total number of bytes sent.
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200913
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700914 Asynchronous version of :meth:`socket.sendfile() <socket.socket.sendfile>`.
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200915
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400916 *sock* must be a non-blocking :const:`socket.SOCK_STREAM`
917 :class:`~socket.socket`.
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200918
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400919 *file* must be a regular file object open in binary mode.
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200920
921 *offset* tells from where to start reading the file. If specified,
922 *count* is the total number of bytes to transmit as opposed to
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400923 sending the file until EOF is reached. File position is always updated,
924 even when this method raises an error, and
925 :meth:`file.tell() <io.IOBase.tell>` can be used to obtain the actual
926 number of bytes sent.
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200927
Carol Willing5b7cbd62018-09-12 17:05:17 -0700928 *fallback*, when set to ``True``, makes asyncio manually read and send
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200929 the file when the platform does not support the sendfile syscall
930 (e.g. Windows or SSL socket on Unix).
931
Andrew Svetlov7464e872018-01-19 20:04:29 +0200932 Raise :exc:`SendfileNotAvailableError` if the system does not support
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200933 *sendfile* syscall and *fallback* is ``False``.
934
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400935 *sock* must be a non-blocking socket.
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700936
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200937 .. versionadded:: 3.7
938
Victor Stinnerc1567df2014-02-08 23:22:58 +0100939
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700940DNS
941^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +0100942
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700943.. coroutinemethod:: loop.getaddrinfo(host, port, \*, family=0, \
944 type=0, proto=0, flags=0)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100945
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700946 Asynchronous version of :meth:`socket.getaddrinfo`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100947
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700948.. coroutinemethod:: loop.getnameinfo(sockaddr, flags=0)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100949
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700950 Asynchronous version of :meth:`socket.getnameinfo`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100951
Yury Selivanovbec23722018-01-28 14:09:40 -0500952.. versionchanged:: 3.7
953 Both *getaddrinfo* and *getnameinfo* methods were always documented
954 to return a coroutine, but prior to Python 3.7 they were, in fact,
955 returning :class:`asyncio.Future` objects. Starting with Python 3.7
956 both methods are coroutines.
957
Victor Stinnerea3183f2013-12-03 01:08:00 +0100958
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700959Working with pipes
960^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +0100961
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700962.. coroutinemethod:: loop.connect_read_pipe(protocol_factory, pipe)
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200963
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400964 Register the read end of *pipe* in the event loop.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100965
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700966 *protocol_factory* must be a callable returning an
967 :ref:`asyncio protocol <asyncio-protocol>` implementation.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100968
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700969 *pipe* is a :term:`file-like object <file object>`.
970
971 Return pair ``(transport, protocol)``, where *transport* supports
Bumsik Kim5cc583d2018-09-16 19:40:44 -0400972 the :class:`ReadTransport` interface and *protocol* is an object
973 instantiated by the *protocol_factory*.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100974
Victor Stinnerd84fd732014-08-26 01:01:59 +0200975 With :class:`SelectorEventLoop` event loop, the *pipe* is set to
976 non-blocking mode.
977
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700978.. coroutinemethod:: loop.connect_write_pipe(protocol_factory, pipe)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100979
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400980 Register the write end of *pipe* in the event loop.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100981
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700982 *protocol_factory* must be a callable returning an
983 :ref:`asyncio protocol <asyncio-protocol>` implementation.
984
985 *pipe* is :term:`file-like object <file object>`.
986
Victor Stinner2cef3002014-10-23 22:38:46 +0200987 Return pair ``(transport, protocol)``, where *transport* supports
Bumsik Kim5cc583d2018-09-16 19:40:44 -0400988 :class:`WriteTransport` interface and *protocol* is an object
989 instantiated by the *protocol_factory*.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100990
Victor Stinnerd84fd732014-08-26 01:01:59 +0200991 With :class:`SelectorEventLoop` event loop, the *pipe* is set to
992 non-blocking mode.
993
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700994.. note::
995
996 :class:`SelectorEventLoop` does not support the above methods on
Carol Willing5b7cbd62018-09-12 17:05:17 -0700997 Windows. Use :class:`ProactorEventLoop` instead for Windows.
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700998
Victor Stinner08444382014-02-02 22:43:39 +0100999.. seealso::
1000
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001001 The :meth:`loop.subprocess_exec` and
1002 :meth:`loop.subprocess_shell` methods.
Victor Stinner08444382014-02-02 22:43:39 +01001003
Victor Stinnerea3183f2013-12-03 01:08:00 +01001004
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001005Unix signals
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001006^^^^^^^^^^^^
Victor Stinner8b863482014-01-27 10:07:50 +01001007
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001008.. method:: loop.add_signal_handler(signum, callback, \*args)
Victor Stinner8b863482014-01-27 10:07:50 +01001009
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001010 Set *callback* as the handler for the *signum* signal.
Victor Stinner8b863482014-01-27 10:07:50 +01001011
Hrvoje Nikšiće3666fc2018-12-18 22:31:29 +01001012 The callback will be invoked by *loop*, along with other queued callbacks
1013 and runnable coroutines of that event loop. Unlike signal handlers
1014 registered using :func:`signal.signal`, a callback registered with this
1015 function is allowed to interact with the event loop.
1016
Victor Stinner8b863482014-01-27 10:07:50 +01001017 Raise :exc:`ValueError` if the signal number is invalid or uncatchable.
1018 Raise :exc:`RuntimeError` if there is a problem setting up the handler.
1019
Yury Selivanove247b462018-09-20 12:43:59 -04001020 Use :func:`functools.partial` :ref:`to pass keyword arguments
Naglis17473342018-12-04 09:31:15 +02001021 <asyncio-pass-keywords>` to *callback*.
Victor Stinner8464c242014-11-28 13:15:41 +01001022
Hrvoje Nikšiće3666fc2018-12-18 22:31:29 +01001023 Like :func:`signal.signal`, this function must be invoked in the main
1024 thread.
1025
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001026.. method:: loop.remove_signal_handler(sig)
Victor Stinner8b863482014-01-27 10:07:50 +01001027
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001028 Remove the handler for the *sig* signal.
Victor Stinner8b863482014-01-27 10:07:50 +01001029
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001030 Return ``True`` if the signal handler was removed, or ``False`` if
1031 no handler was set for the given signal.
Victor Stinner8b863482014-01-27 10:07:50 +01001032
Cheryl Sabella2d6097d2018-10-12 10:55:20 -04001033 .. availability:: Unix.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001034
Victor Stinner8b863482014-01-27 10:07:50 +01001035.. seealso::
1036
1037 The :mod:`signal` module.
1038
1039
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001040Executing code in thread or process pools
1041^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +01001042
Yury Selivanov47150392018-09-18 17:55:44 -04001043.. awaitablemethod:: loop.run_in_executor(executor, func, \*args)
Victor Stinnerea3183f2013-12-03 01:08:00 +01001044
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001045 Arrange for *func* to be called in the specified executor.
Victor Stinnerea3183f2013-12-03 01:08:00 +01001046
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001047 The *executor* argument should be an :class:`concurrent.futures.Executor`
Larry Hastings3732ed22014-03-15 21:13:56 -07001048 instance. The default executor is used if *executor* is ``None``.
Victor Stinnerea3183f2013-12-03 01:08:00 +01001049
Yury Selivanove247b462018-09-20 12:43:59 -04001050 Example::
1051
1052 import asyncio
1053 import concurrent.futures
1054
1055 def blocking_io():
1056 # File operations (such as logging) can block the
1057 # event loop: run them in a thread pool.
1058 with open('/dev/urandom', 'rb') as f:
1059 return f.read(100)
1060
1061 def cpu_bound():
1062 # CPU-bound operations will block the event loop:
1063 # in general it is preferable to run them in a
1064 # process pool.
1065 return sum(i * i for i in range(10 ** 7))
1066
1067 async def main():
1068 loop = asyncio.get_running_loop()
1069
1070 ## Options:
1071
1072 # 1. Run in the default loop's executor:
1073 result = await loop.run_in_executor(
1074 None, blocking_io)
1075 print('default thread pool', result)
1076
1077 # 2. Run in a custom thread pool:
1078 with concurrent.futures.ThreadPoolExecutor() as pool:
1079 result = await loop.run_in_executor(
1080 pool, blocking_io)
1081 print('custom thread pool', result)
1082
1083 # 3. Run in a custom process pool:
1084 with concurrent.futures.ProcessPoolExecutor() as pool:
1085 result = await loop.run_in_executor(
1086 pool, cpu_bound)
1087 print('custom process pool', result)
1088
1089 asyncio.run(main())
Victor Stinner8464c242014-11-28 13:15:41 +01001090
Yury Selivanovbec23722018-01-28 14:09:40 -05001091 This method returns a :class:`asyncio.Future` object.
1092
Yury Selivanove247b462018-09-20 12:43:59 -04001093 Use :func:`functools.partial` :ref:`to pass keyword arguments
1094 <asyncio-pass-keywords>` to *func*.
1095
Yury Selivanove8a60452016-10-21 17:40:42 -04001096 .. versionchanged:: 3.5.3
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001097 :meth:`loop.run_in_executor` no longer configures the
Yury Selivanove8a60452016-10-21 17:40:42 -04001098 ``max_workers`` of the thread pool executor it creates, instead
1099 leaving it up to the thread pool executor
1100 (:class:`~concurrent.futures.ThreadPoolExecutor`) to set the
1101 default.
1102
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001103.. method:: loop.set_default_executor(executor)
Victor Stinnerea3183f2013-12-03 01:08:00 +01001104
Elvis Pranskevichus22d25082018-07-30 11:42:43 +01001105 Set *executor* as the default executor used by :meth:`run_in_executor`.
1106 *executor* should be an instance of
1107 :class:`~concurrent.futures.ThreadPoolExecutor`.
1108
1109 .. deprecated:: 3.8
1110 Using an executor that is not an instance of
1111 :class:`~concurrent.futures.ThreadPoolExecutor` is deprecated and
1112 will trigger an error in Python 3.9.
Victor Stinnerea3183f2013-12-03 01:08:00 +01001113
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001114 *executor* must be an instance of
1115 :class:`concurrent.futures.ThreadPoolExecutor`.
1116
Victor Stinnerea3183f2013-12-03 01:08:00 +01001117
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001118Error Handling API
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001119^^^^^^^^^^^^^^^^^^
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001120
Martin Panterc04fb562016-02-10 05:44:01 +00001121Allows customizing how exceptions are handled in the event loop.
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001122
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001123.. method:: loop.set_exception_handler(handler)
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001124
1125 Set *handler* as the new event loop exception handler.
1126
1127 If *handler* is ``None``, the default exception handler will
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001128 be set. Otherwise, *handler* must be a callable with the signature
1129 matching ``(loop, context)``, where ``loop``
1130 is a reference to the active event loop, and ``context``
1131 is a ``dict`` object containing the details of the exception
1132 (see :meth:`call_exception_handler` documentation for details
1133 about context).
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001134
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001135.. method:: loop.get_exception_handler()
Yury Selivanov950204d2016-05-16 16:23:00 -04001136
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001137 Return the current exception handler, or ``None`` if no custom
1138 exception handler was set.
Yury Selivanov950204d2016-05-16 16:23:00 -04001139
1140 .. versionadded:: 3.5.2
1141
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001142.. method:: loop.default_exception_handler(context)
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001143
1144 Default exception handler.
1145
1146 This is called when an exception occurs and no exception
Carol Willing5b7cbd62018-09-12 17:05:17 -07001147 handler is set. This can be called by a custom exception
1148 handler that wants to defer to the default handler behavior.
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001149
1150 *context* parameter has the same meaning as in
1151 :meth:`call_exception_handler`.
1152
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001153.. method:: loop.call_exception_handler(context)
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001154
1155 Call the current event loop exception handler.
1156
1157 *context* is a ``dict`` object containing the following keys
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001158 (new keys may be introduced in future Python versions):
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001159
1160 * 'message': Error message;
1161 * 'exception' (optional): Exception object;
1162 * 'future' (optional): :class:`asyncio.Future` instance;
1163 * 'handle' (optional): :class:`asyncio.Handle` instance;
1164 * 'protocol' (optional): :ref:`Protocol <asyncio-protocol>` instance;
1165 * 'transport' (optional): :ref:`Transport <asyncio-transport>` instance;
1166 * 'socket' (optional): :class:`socket.socket` instance.
1167
1168 .. note::
1169
Carol Willing5b7cbd62018-09-12 17:05:17 -07001170 This method should not be overloaded in subclassed
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001171 event loops. For custom exception handling, use
1172 the :meth:`set_exception_handler()` method.
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001173
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001174Enabling debug mode
1175^^^^^^^^^^^^^^^^^^^
Victor Stinner0f3e6bc2014-02-19 23:15:02 +01001176
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001177.. method:: loop.get_debug()
Victor Stinner0f3e6bc2014-02-19 23:15:02 +01001178
Victor Stinner7b7120e2014-06-23 00:12:14 +02001179 Get the debug mode (:class:`bool`) of the event loop.
1180
1181 The default value is ``True`` if the environment variable
1182 :envvar:`PYTHONASYNCIODEBUG` is set to a non-empty string, ``False``
1183 otherwise.
Victor Stinner0f3e6bc2014-02-19 23:15:02 +01001184
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001185.. method:: loop.set_debug(enabled: bool)
Victor Stinner0f3e6bc2014-02-19 23:15:02 +01001186
1187 Set the debug mode of the event loop.
1188
Yury Selivanov805e27e2018-09-14 16:57:11 -07001189 .. versionchanged:: 3.7
1190
1191 The new ``-X dev`` command line option can now also be used
1192 to enable the debug mode.
1193
Victor Stinner0f3e6bc2014-02-19 23:15:02 +01001194.. seealso::
1195
Victor Stinner62511fd2014-06-23 00:36:11 +02001196 The :ref:`debug mode of asyncio <asyncio-debug-mode>`.
Victor Stinner0f3e6bc2014-02-19 23:15:02 +01001197
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001198
1199Running Subprocesses
1200^^^^^^^^^^^^^^^^^^^^
1201
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001202Methods described in this subsections are low-level. In regular
1203async/await code consider using the high-level
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001204:func:`asyncio.create_subprocess_shell` and
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001205:func:`asyncio.create_subprocess_exec` convenience functions instead.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001206
1207.. note::
1208
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001209 The default asyncio event loop on **Windows** does not support
1210 subprocesses. See :ref:`Subprocess Support on Windows
1211 <asyncio-windows-subprocess>` for details.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001212
1213.. coroutinemethod:: loop.subprocess_exec(protocol_factory, \*args, \
1214 stdin=subprocess.PIPE, stdout=subprocess.PIPE, \
1215 stderr=subprocess.PIPE, \*\*kwargs)
1216
1217 Create a subprocess from one or more string arguments specified by
1218 *args*.
1219
1220 *args* must be a list of strings represented by:
1221
1222 * :class:`str`;
1223 * or :class:`bytes`, encoded to the
1224 :ref:`filesystem encoding <filesystem-encoding>`.
1225
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001226 The first string specifies the program executable,
Carol Willing5b7cbd62018-09-12 17:05:17 -07001227 and the remaining strings specify the arguments. Together, string
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001228 arguments form the ``argv`` of the program.
1229
1230 This is similar to the standard library :class:`subprocess.Popen`
1231 class called with ``shell=False`` and the list of strings passed as
1232 the first argument; however, where :class:`~subprocess.Popen` takes
1233 a single argument which is list of strings, *subprocess_exec*
1234 takes multiple string arguments.
1235
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001236 The *protocol_factory* must be a callable returning a subclass of the
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001237 :class:`asyncio.SubprocessProtocol` class.
1238
1239 Other parameters:
1240
sbstpf0d4c642019-05-27 19:51:19 -04001241 * *stdin* can be any of these:
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001242
sbstpf0d4c642019-05-27 19:51:19 -04001243 * a file-like object representing a pipe to be connected to the
1244 subprocess's standard input stream using
1245 :meth:`~loop.connect_write_pipe`
1246 * the :const:`subprocess.PIPE` constant (default) which will create a new
1247 pipe and connect it,
1248 * the value ``None`` which will make the subprocess inherit the file
1249 descriptor from this process
1250 * the :const:`subprocess.DEVNULL` constant which indicates that the
1251 special :data:`os.devnull` file will be used
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001252
sbstpf0d4c642019-05-27 19:51:19 -04001253 * *stdout* can be any of these:
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001254
sbstpf0d4c642019-05-27 19:51:19 -04001255 * a file-like object representing a pipe to be connected to the
1256 subprocess's standard output stream using
1257 :meth:`~loop.connect_write_pipe`
1258 * the :const:`subprocess.PIPE` constant (default) which will create a new
1259 pipe and connect it,
1260 * the value ``None`` which will make the subprocess inherit the file
1261 descriptor from this process
1262 * the :const:`subprocess.DEVNULL` constant which indicates that the
1263 special :data:`os.devnull` file will be used
1264
1265 * *stderr* can be any of these:
1266
1267 * a file-like object representing a pipe to be connected to the
1268 subprocess's standard error stream using
1269 :meth:`~loop.connect_write_pipe`
1270 * the :const:`subprocess.PIPE` constant (default) which will create a new
1271 pipe and connect it,
1272 * the value ``None`` which will make the subprocess inherit the file
1273 descriptor from this process
1274 * the :const:`subprocess.DEVNULL` constant which indicates that the
1275 special :data:`os.devnull` file will be used
1276 * the :const:`subprocess.STDOUT` constant which will connect the standard
1277 error stream to the process' standard output stream
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001278
1279 * All other keyword arguments are passed to :class:`subprocess.Popen`
sbstpf0d4c642019-05-27 19:51:19 -04001280 without interpretation, except for *bufsize*, *universal_newlines*,
1281 *shell*, *text*, *encoding* and *errors*, which should not be specified
1282 at all.
1283
1284 The ``asyncio`` subprocess API does not support decoding the streams
1285 as text. :func:`bytes.decode` can be used to convert the bytes returned
1286 from the stream to text.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001287
1288 See the constructor of the :class:`subprocess.Popen` class
1289 for documentation on other arguments.
1290
1291 Returns a pair of ``(transport, protocol)``, where *transport*
Bumsik Kim5cc583d2018-09-16 19:40:44 -04001292 conforms to the :class:`asyncio.SubprocessTransport` base class and
1293 *protocol* is an object instantiated by the *protocol_factory*.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001294
1295.. coroutinemethod:: loop.subprocess_shell(protocol_factory, cmd, \*, \
1296 stdin=subprocess.PIPE, stdout=subprocess.PIPE, \
1297 stderr=subprocess.PIPE, \*\*kwargs)
1298
1299 Create a subprocess from *cmd*, which can be a :class:`str` or a
1300 :class:`bytes` string encoded to the
1301 :ref:`filesystem encoding <filesystem-encoding>`,
1302 using the platform's "shell" syntax.
1303
1304 This is similar to the standard library :class:`subprocess.Popen`
1305 class called with ``shell=True``.
1306
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001307 The *protocol_factory* must be a callable returning a subclass of the
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001308 :class:`SubprocessProtocol` class.
1309
1310 See :meth:`~loop.subprocess_exec` for more details about
1311 the remaining arguments.
1312
1313 Returns a pair of ``(transport, protocol)``, where *transport*
Bumsik Kim5cc583d2018-09-16 19:40:44 -04001314 conforms to the :class:`SubprocessTransport` base class and
1315 *protocol* is an object instantiated by the *protocol_factory*.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001316
1317.. note::
1318 It is the application's responsibility to ensure that all whitespace
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001319 and special characters are quoted appropriately to avoid `shell injection
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001320 <https://en.wikipedia.org/wiki/Shell_injection#Shell_injection>`_
1321 vulnerabilities. The :func:`shlex.quote` function can be used to
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001322 properly escape whitespace and special characters in strings that
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001323 are going to be used to construct shell commands.
1324
1325
1326Callback Handles
1327================
1328
1329.. class:: Handle
1330
1331 A callback wrapper object returned by :meth:`loop.call_soon`,
1332 :meth:`loop.call_soon_threadsafe`.
1333
1334 .. method:: cancel()
1335
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001336 Cancel the callback. If the callback has already been canceled
1337 or executed, this method has no effect.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001338
1339 .. method:: cancelled()
1340
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001341 Return ``True`` if the callback was cancelled.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001342
1343 .. versionadded:: 3.7
1344
1345.. class:: TimerHandle
1346
1347 A callback wrapper object returned by :meth:`loop.call_later`,
1348 and :meth:`loop.call_at`.
1349
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001350 This class is a subclass of :class:`Handle`.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001351
1352 .. method:: when()
1353
1354 Return a scheduled callback time as :class:`float` seconds.
1355
1356 The time is an absolute timestamp, using the same time
1357 reference as :meth:`loop.time`.
1358
1359 .. versionadded:: 3.7
1360
1361
1362Server Objects
1363==============
1364
1365Server objects are created by :meth:`loop.create_server`,
1366:meth:`loop.create_unix_server`, :func:`start_server`,
1367and :func:`start_unix_server` functions.
1368
1369Do not instantiate the class directly.
Victor Stinner8c462c52014-01-24 18:11:43 +01001370
Victor Stinner8ebeb032014-07-11 23:47:40 +02001371.. class:: Server
Victor Stinner8c462c52014-01-24 18:11:43 +01001372
Yury Selivanovc9070d02018-01-25 18:08:09 -05001373 *Server* objects are asynchronous context managers. When used in an
1374 ``async with`` statement, it's guaranteed that the Server object is
1375 closed and not accepting new connections when the ``async with``
1376 statement is completed::
1377
1378 srv = await loop.create_server(...)
1379
1380 async with srv:
1381 # some code
1382
Carol Willing5b7cbd62018-09-12 17:05:17 -07001383 # At this point, srv is closed and no longer accepts new connections.
Yury Selivanovc9070d02018-01-25 18:08:09 -05001384
1385
1386 .. versionchanged:: 3.7
1387 Server object is an asynchronous context manager since Python 3.7.
Victor Stinner8c462c52014-01-24 18:11:43 +01001388
1389 .. method:: close()
1390
Victor Stinner4bfb14a2014-07-12 03:20:24 +02001391 Stop serving: close listening sockets and set the :attr:`sockets`
1392 attribute to ``None``.
1393
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001394 The sockets that represent existing incoming client connections
1395 are left open.
Victor Stinner8ebeb032014-07-11 23:47:40 +02001396
Berker Peksag49c9edf2016-01-20 07:14:22 +02001397 The server is closed asynchronously, use the :meth:`wait_closed`
1398 coroutine to wait until the server is closed.
Victor Stinner8c462c52014-01-24 18:11:43 +01001399
Srinivas Reddy Thatiparthy (శ్రీనివాస్ రెడ్డి తాటిపర్తి)1634fc22017-12-30 20:39:32 +05301400 .. method:: get_loop()
1401
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001402 Return the event loop associated with the server object.
Srinivas Reddy Thatiparthy (శ్రీనివాస్ రెడ్డి తాటిపర్తి)1634fc22017-12-30 20:39:32 +05301403
1404 .. versionadded:: 3.7
1405
Yury Selivanovc9070d02018-01-25 18:08:09 -05001406 .. coroutinemethod:: start_serving()
1407
1408 Start accepting connections.
1409
1410 This method is idempotent, so it can be called when
1411 the server is already being serving.
1412
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001413 The *start_serving* keyword-only parameter to
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001414 :meth:`loop.create_server` and
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001415 :meth:`asyncio.start_server` allows creating a Server object
1416 that is not accepting connections initially. In this case
1417 ``Server.start_serving()``, or :meth:`Server.serve_forever` can be used
1418 to make the Server start accepting connections.
Yury Selivanovc9070d02018-01-25 18:08:09 -05001419
1420 .. versionadded:: 3.7
1421
1422 .. coroutinemethod:: serve_forever()
1423
1424 Start accepting connections until the coroutine is cancelled.
1425 Cancellation of ``serve_forever`` task causes the server
1426 to be closed.
1427
1428 This method can be called if the server is already accepting
1429 connections. Only one ``serve_forever`` task can exist per
1430 one *Server* object.
1431
1432 Example::
1433
1434 async def client_connected(reader, writer):
1435 # Communicate with the client with
1436 # reader/writer streams. For example:
1437 await reader.readline()
1438
1439 async def main(host, port):
1440 srv = await asyncio.start_server(
1441 client_connected, host, port)
Andrew Svetlov17ab8f02018-02-17 19:44:35 +02001442 await srv.serve_forever()
Yury Selivanovc9070d02018-01-25 18:08:09 -05001443
1444 asyncio.run(main('127.0.0.1', 0))
1445
1446 .. versionadded:: 3.7
1447
1448 .. method:: is_serving()
1449
1450 Return ``True`` if the server is accepting new connections.
1451
1452 .. versionadded:: 3.7
1453
Victor Stinnerbdd574d2015-02-12 22:49:18 +01001454 .. coroutinemethod:: wait_closed()
Victor Stinner8c462c52014-01-24 18:11:43 +01001455
Victor Stinner8ebeb032014-07-11 23:47:40 +02001456 Wait until the :meth:`close` method completes.
1457
Victor Stinner8ebeb032014-07-11 23:47:40 +02001458 .. attribute:: sockets
1459
Emmanuel Ariasdf5cdc12019-02-22 14:34:41 -03001460 List of :class:`socket.socket` objects the server is listening on.
Victor Stinner8c462c52014-01-24 18:11:43 +01001461
Yury Selivanovc9070d02018-01-25 18:08:09 -05001462 .. versionchanged:: 3.7
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001463 Prior to Python 3.7 ``Server.sockets`` used to return an
1464 internal list of server sockets directly. In 3.7 a copy
Yury Selivanovc9070d02018-01-25 18:08:09 -05001465 of that list is returned.
1466
Victor Stinner8c462c52014-01-24 18:11:43 +01001467
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001468.. _asyncio-event-loops:
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001469
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001470Event Loop Implementations
1471==========================
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001472
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001473asyncio ships with two different event loop implementations:
1474:class:`SelectorEventLoop` and :class:`ProactorEventLoop`.
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001475
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001476By default asyncio is configured to use :class:`SelectorEventLoop`
Miss Islington (bot)2e0ec5b2019-06-23 17:33:00 -07001477on Unix and :class:`ProactorEventLoop` on Windows.
Andrew Svetlov3d4dbd82018-02-01 19:59:32 +02001478
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001479
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001480.. class:: SelectorEventLoop
1481
1482 An event loop based on the :mod:`selectors` module.
1483
1484 Uses the most efficient *selector* available for the given
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001485 platform. It is also possible to manually configure the
1486 exact selector implementation to be used::
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001487
1488 import asyncio
1489 import selectors
1490
1491 selector = selectors.SelectSelector()
1492 loop = asyncio.SelectorEventLoop(selector)
1493 asyncio.set_event_loop(loop)
Andrew Svetlov7464e872018-01-19 20:04:29 +02001494
1495
Cheryl Sabella2d6097d2018-10-12 10:55:20 -04001496 .. availability:: Unix, Windows.
Andrew Svetlov7464e872018-01-19 20:04:29 +02001497
1498
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001499.. class:: ProactorEventLoop
1500
1501 An event loop for Windows that uses "I/O Completion Ports" (IOCP).
1502
Cheryl Sabella2d6097d2018-10-12 10:55:20 -04001503 .. availability:: Windows.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001504
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001505 .. seealso::
1506
1507 `MSDN documentation on I/O Completion Ports
1508 <https://docs.microsoft.com/en-ca/windows/desktop/FileIO/i-o-completion-ports>`_.
1509
1510
1511.. class:: AbstractEventLoop
1512
1513 Abstract base class for asyncio-compliant event loops.
1514
1515 The :ref:`Event Loop Methods <asyncio-event-loop>` section lists all
1516 methods that an alternative implementation of ``AbstractEventLoop``
1517 should have defined.
1518
1519
1520Examples
1521========
1522
1523Note that all examples in this section **purposefully** show how
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001524to use the low-level event loop APIs, such as :meth:`loop.run_forever`
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001525and :meth:`loop.call_soon`. Modern asyncio applications rarely
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001526need to be written this way; consider using the high-level functions
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001527like :func:`asyncio.run`.
1528
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001529
Yury Selivanov394374e2018-09-17 15:35:24 -04001530.. _asyncio_example_lowlevel_helloworld:
Victor Stinnerea3183f2013-12-03 01:08:00 +01001531
Victor Stinner7f314ed2014-10-15 18:49:16 +02001532Hello World with call_soon()
Victor Stinnera092a612015-01-09 15:58:41 +01001533^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +01001534
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001535An example using the :meth:`loop.call_soon` method to schedule a
1536callback. The callback displays ``"Hello World"`` and then stops the
1537event loop::
Victor Stinnerea3183f2013-12-03 01:08:00 +01001538
1539 import asyncio
1540
Victor Stinner7f314ed2014-10-15 18:49:16 +02001541 def hello_world(loop):
Carol Willing5b7cbd62018-09-12 17:05:17 -07001542 """A callback to print 'Hello World' and stop the event loop"""
Victor Stinnerea3183f2013-12-03 01:08:00 +01001543 print('Hello World')
Victor Stinner7f314ed2014-10-15 18:49:16 +02001544 loop.stop()
Victor Stinnerea3183f2013-12-03 01:08:00 +01001545
1546 loop = asyncio.get_event_loop()
Victor Stinner7f314ed2014-10-15 18:49:16 +02001547
1548 # Schedule a call to hello_world()
1549 loop.call_soon(hello_world, loop)
1550
1551 # Blocking call interrupted by loop.stop()
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001552 try:
1553 loop.run_forever()
1554 finally:
1555 loop.close()
Victor Stinnerea3183f2013-12-03 01:08:00 +01001556
Victor Stinner3e09e322013-12-03 01:22:06 +01001557.. seealso::
Victor Stinnerea3183f2013-12-03 01:08:00 +01001558
Yury Selivanov3faaa882018-09-14 13:32:07 -07001559 A similar :ref:`Hello World <coroutine>`
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001560 example created with a coroutine and the :func:`run` function.
Victor Stinnerea3183f2013-12-03 01:08:00 +01001561
Victor Stinner8b863482014-01-27 10:07:50 +01001562
Yury Selivanov394374e2018-09-17 15:35:24 -04001563.. _asyncio_example_call_later:
Victor Stinner7f314ed2014-10-15 18:49:16 +02001564
1565Display the current date with call_later()
Victor Stinnera092a612015-01-09 15:58:41 +01001566^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinner7f314ed2014-10-15 18:49:16 +02001567
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001568An example of a callback displaying the current date every second. The
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001569callback uses the :meth:`loop.call_later` method to reschedule itself
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001570after 5 seconds, and then stops the event loop::
Victor Stinner7f314ed2014-10-15 18:49:16 +02001571
1572 import asyncio
1573 import datetime
1574
1575 def display_date(end_time, loop):
1576 print(datetime.datetime.now())
1577 if (loop.time() + 1.0) < end_time:
1578 loop.call_later(1, display_date, end_time, loop)
1579 else:
1580 loop.stop()
1581
1582 loop = asyncio.get_event_loop()
1583
1584 # Schedule the first call to display_date()
1585 end_time = loop.time() + 5.0
1586 loop.call_soon(display_date, end_time, loop)
1587
1588 # Blocking call interrupted by loop.stop()
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001589 try:
1590 loop.run_forever()
1591 finally:
1592 loop.close()
Victor Stinner7f314ed2014-10-15 18:49:16 +02001593
1594.. seealso::
1595
Yury Selivanov7372c3b2018-09-14 15:11:24 -07001596 A similar :ref:`current date <asyncio_example_sleep>` example
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001597 created with a coroutine and the :func:`run` function.
Victor Stinner7f314ed2014-10-15 18:49:16 +02001598
1599
Yury Selivanov394374e2018-09-17 15:35:24 -04001600.. _asyncio_example_watch_fd:
Victor Stinner8b863482014-01-27 10:07:50 +01001601
Victor Stinner04e6df32014-10-11 16:16:27 +02001602Watch a file descriptor for read events
Victor Stinnera092a612015-01-09 15:58:41 +01001603^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinner04e6df32014-10-11 16:16:27 +02001604
1605Wait until a file descriptor received some data using the
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001606:meth:`loop.add_reader` method and then close the event loop::
Victor Stinner04e6df32014-10-11 16:16:27 +02001607
1608 import asyncio
Victor Stinnerac577d72017-11-28 21:33:20 +01001609 from socket import socketpair
Victor Stinner04e6df32014-10-11 16:16:27 +02001610
1611 # Create a pair of connected file descriptors
Victor Stinnerccd8e342014-10-11 16:30:02 +02001612 rsock, wsock = socketpair()
Carol Willing5b7cbd62018-09-12 17:05:17 -07001613
Victor Stinner04e6df32014-10-11 16:16:27 +02001614 loop = asyncio.get_event_loop()
1615
1616 def reader():
1617 data = rsock.recv(100)
1618 print("Received:", data.decode())
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001619
Victor Stinner2cef3002014-10-23 22:38:46 +02001620 # We are done: unregister the file descriptor
Victor Stinner04e6df32014-10-11 16:16:27 +02001621 loop.remove_reader(rsock)
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001622
Victor Stinner04e6df32014-10-11 16:16:27 +02001623 # Stop the event loop
1624 loop.stop()
1625
Victor Stinner2cef3002014-10-23 22:38:46 +02001626 # Register the file descriptor for read event
Victor Stinner04e6df32014-10-11 16:16:27 +02001627 loop.add_reader(rsock, reader)
1628
1629 # Simulate the reception of data from the network
1630 loop.call_soon(wsock.send, 'abc'.encode())
1631
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001632 try:
1633 # Run the event loop
1634 loop.run_forever()
1635 finally:
Carol Willing5b7cbd62018-09-12 17:05:17 -07001636 # We are done. Close sockets and the event loop.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001637 rsock.close()
1638 wsock.close()
1639 loop.close()
Victor Stinner04e6df32014-10-11 16:16:27 +02001640
1641.. seealso::
1642
Yury Selivanov394374e2018-09-17 15:35:24 -04001643 * A similar :ref:`example <asyncio_example_create_connection>`
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001644 using transports, protocols, and the
1645 :meth:`loop.create_connection` method.
Victor Stinner04e6df32014-10-11 16:16:27 +02001646
Yury Selivanov394374e2018-09-17 15:35:24 -04001647 * Another similar :ref:`example <asyncio_example_create_connection-streams>`
Yury Selivanov1c19d652019-09-29 22:30:17 -07001648 using the high-level :func:`asyncio.open_connection` function
1649 and streams.
Victor Stinner04e6df32014-10-11 16:16:27 +02001650
1651
Yury Selivanov394374e2018-09-17 15:35:24 -04001652.. _asyncio_example_unix_signals:
1653
Victor Stinner04e6df32014-10-11 16:16:27 +02001654Set signal handlers for SIGINT and SIGTERM
Victor Stinnera092a612015-01-09 15:58:41 +01001655^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinner04e6df32014-10-11 16:16:27 +02001656
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001657(This ``signals`` example only works on Unix.)
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001658
1659Register handlers for signals :py:data:`SIGINT` and :py:data:`SIGTERM`
1660using the :meth:`loop.add_signal_handler` method::
Victor Stinner8b863482014-01-27 10:07:50 +01001661
1662 import asyncio
1663 import functools
1664 import os
1665 import signal
1666
Alexander Vasinceb842e2019-05-03 18:25:36 +03001667 def ask_exit(signame, loop):
Victor Stinner8b863482014-01-27 10:07:50 +01001668 print("got signal %s: exit" % signame)
1669 loop.stop()
1670
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001671 async def main():
1672 loop = asyncio.get_running_loop()
Victor Stinner8b863482014-01-27 10:07:50 +01001673
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001674 for signame in {'SIGINT', 'SIGTERM'}:
1675 loop.add_signal_handler(
1676 getattr(signal, signame),
Alexander Vasinceb842e2019-05-03 18:25:36 +03001677 functools.partial(ask_exit, signame, loop))
Victor Stinner2cef3002014-10-23 22:38:46 +02001678
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001679 await asyncio.sleep(3600)
1680
1681 print("Event loop running for 1 hour, press Ctrl+C to interrupt.")
1682 print(f"pid {os.getpid()}: send SIGINT or SIGTERM to exit.")
1683
1684 asyncio.run(main())