blob: f75ca9a966b6d55026930f302e6afedd468939cf [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
8
9.. rubric:: Preface
10
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -040011The event loop is the core of every asyncio application.
Yury Selivanov7c7605f2018-09-11 09:54:40 -070012Event loops run asynchronous tasks and callbacks, perform network
Carol Willing5b7cbd62018-09-12 17:05:17 -070013IO operations, and run subprocesses.
Yury Selivanov7c7605f2018-09-11 09:54:40 -070014
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -040015Application developers should typically use the high-level asyncio functions,
16such as :func:`asyncio.run`, and should rarely need to reference the loop
17object or call its methods. This section is intended mostly for authors
18of lower-level code, libraries, and frameworks, who need finer control over
19the event loop behavior.
Yury Selivanov7c7605f2018-09-11 09:54:40 -070020
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -040021.. rubric:: Obtaining the Event Loop
Yury Selivanov7c7605f2018-09-11 09:54:40 -070022
23The following low-level functions can be used to get, set, or create
24an event loop:
25
26.. function:: get_running_loop()
27
28 Return the running event loop in the current OS thread.
29
30 If there is no running event loop a :exc:`RuntimeError` is raised.
31 This function can only be called from a coroutine or a callback.
32
33 .. versionadded:: 3.7
34
35.. function:: get_event_loop()
36
37 Get the current event loop. If there is no current event loop set
38 in the current OS thread and :func:`set_event_loop` has not yet
39 been called, asyncio will create a new event loop and set it as the
40 current one.
41
Carol Willing5b7cbd62018-09-12 17:05:17 -070042 Because this function has rather complex behavior (especially
43 when custom event loop policies are in use), using the
44 :func:`get_running_loop` function is preferred to :func:`get_event_loop`
45 in coroutines and callbacks.
Yury Selivanov7c7605f2018-09-11 09:54:40 -070046
Carol Willing5b7cbd62018-09-12 17:05:17 -070047 Consider also using the :func:`asyncio.run` function instead of using
48 lower level functions to manually create and close an event loop.
Yury Selivanov7c7605f2018-09-11 09:54:40 -070049
50.. function:: set_event_loop(loop)
51
52 Set *loop* as a current event loop for the current OS thread.
53
54.. function:: new_event_loop()
55
56 Create a new event loop object.
57
58Note that the behaviour of :func:`get_event_loop`, :func:`set_event_loop`,
59and :func:`new_event_loop` functions can be altered by
60:ref:`setting a custom event loop policy <asyncio-policies>`.
61
62
63.. rubric:: Contents
64
65This documentation page contains the following sections:
66
Carol Willing5b7cbd62018-09-12 17:05:17 -070067* The `Event Loop Methods`_ section is the reference documentation of
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -040068 the event loop APIs;
Yury Selivanov7c7605f2018-09-11 09:54:40 -070069
70* The `Callback Handles`_ section documents the :class:`Handle` and
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -040071 :class:`TimerHandle` instances which are returned from scheduling
72 methods such as :meth:`loop.call_soon` and :meth:`loop.call_later`;
Yury Selivanov7c7605f2018-09-11 09:54:40 -070073
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -040074* The `Server Objects`_ section documents types returned from
Yury Selivanov7c7605f2018-09-11 09:54:40 -070075 event loop methods like :meth:`loop.create_server`;
76
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -040077* The `Event Loop Implementations`_ section documents the
Yury Selivanov7c7605f2018-09-11 09:54:40 -070078 :class:`SelectorEventLoop` and :class:`ProactorEventLoop` classes;
79
80* The `Examples`_ section showcases how to work with some event
81 loop APIs.
82
83
Victor Stinner9592edb2014-02-02 15:03:02 +010084.. _asyncio-event-loop:
Victor Stinnerea3183f2013-12-03 01:08:00 +010085
Yury Selivanov7c7605f2018-09-11 09:54:40 -070086Event Loop Methods
87==================
Victor Stinnerea3183f2013-12-03 01:08:00 +010088
Carol Willing5b7cbd62018-09-12 17:05:17 -070089Event loops have **low-level** APIs for the following:
lf627d2c82017-07-25 17:03:51 -060090
Yury Selivanov7c7605f2018-09-11 09:54:40 -070091.. contents::
92 :depth: 1
93 :local:
Victor Stinnerea3183f2013-12-03 01:08:00 +010094
Victor Stinnerea3183f2013-12-03 01:08:00 +010095
Yury Selivanov7c7605f2018-09-11 09:54:40 -070096Running and stopping the loop
97^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +010098
Yury Selivanov7c7605f2018-09-11 09:54:40 -070099.. method:: loop.run_until_complete(future)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100100
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400101 Run until the *future* (an instance of :class:`Future`) has
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700102 completed.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100103
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700104 If the argument is a :ref:`coroutine object <coroutine>` it
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400105 is implicitly scheduled to run as a :class:`asyncio.Task`.
Eli Bendersky136fea22014-02-09 06:55:58 -0800106
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700107 Return the Future's result or raise its exception.
Guido van Rossumf68afd82016-08-08 09:41:21 -0700108
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700109.. method:: loop.run_forever()
Guido van Rossumf68afd82016-08-08 09:41:21 -0700110
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700111 Run the event loop until :meth:`stop` is called.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100112
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700113 If :meth:`stop` is called before :meth:`run_forever()` is called,
114 the loop will poll the I/O selector once with a timeout of zero,
115 run all callbacks scheduled in response to I/O events (and
116 those that were already scheduled), and then exit.
Victor Stinner83704962015-02-25 14:24:15 +0100117
Guido van Rossum41f69f42015-11-19 13:28:47 -0800118 If :meth:`stop` is called while :meth:`run_forever` is running,
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700119 the loop will run the current batch of callbacks and then exit.
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400120 Note that new callbacks scheduled by callbacks will not run in this
Carol Willing5b7cbd62018-09-12 17:05:17 -0700121 case; instead, they will run the next time :meth:`run_forever` or
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700122 :meth:`run_until_complete` is called.
Guido van Rossum41f69f42015-11-19 13:28:47 -0800123
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700124.. method:: loop.stop()
Victor Stinnerea3183f2013-12-03 01:08:00 +0100125
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700126 Stop the event loop.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100127
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700128.. method:: loop.is_running()
Victor Stinnerea3183f2013-12-03 01:08:00 +0100129
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700130 Return ``True`` if the event loop is currently running.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100131
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700132.. method:: loop.is_closed()
Victor Stinnerea3183f2013-12-03 01:08:00 +0100133
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700134 Return ``True`` if the event loop was closed.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100135
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700136.. method:: loop.close()
Victor Stinnerea3183f2013-12-03 01:08:00 +0100137
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700138 Close the event loop.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100139
Andriy Maletskyb83d9172018-10-29 23:39:21 +0200140 The loop must not be running when this function is called.
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700141 Any pending callbacks will be discarded.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100142
Victor Stinner0f0a30f2019-06-03 23:31:04 +0200143 This method clears all queues and shuts down the default executor. By
144 default, it waits for the default executor to finish. Set
145 *loop.wait_executor_on_close* to ``False`` to not wait for the executor.
Guido van Rossum41f69f42015-11-19 13:28:47 -0800146
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700147 This method is idempotent and irreversible. No other methods
148 should be called after the event loop is closed.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100149
Victor Stinner0f0a30f2019-06-03 23:31:04 +0200150 .. versionchanged:: 3.8
151 The method now waits for the default executor to finish by default.
152 Added *loop.wait_executor_on_close* attribute.
153
154
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
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700466 Create a datagram connection.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100467
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700468 The socket family can be either :py:data:`~socket.AF_INET`,
469 :py:data:`~socket.AF_INET6`, or :py:data:`~socket.AF_UNIX`,
470 depending on *host* (or the *family* argument, if provided).
Victor Stinnera6919aa2014-02-19 13:32:34 +0100471
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700472 The socket type will be :py:data:`~socket.SOCK_DGRAM`.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100473
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700474 *protocol_factory* must be a callable returning a
475 :ref:`protocol <asyncio-protocol>` implementation.
476
477 A tuple of ``(transport, protocol)`` is returned on success.
478
479 Other arguments:
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700480
481 * *local_addr*, if given, is a ``(local_host, local_port)`` tuple used
482 to bind the socket to locally. The *local_host* and *local_port*
483 are looked up using :meth:`getaddrinfo`.
484
485 * *remote_addr*, if given, is a ``(remote_host, remote_port)`` tuple used
486 to connect the socket to a remote address. The *remote_host* and
487 *remote_port* are looked up using :meth:`getaddrinfo`.
488
489 * *family*, *proto*, *flags* are the optional address family, protocol
490 and flags to be passed through to :meth:`getaddrinfo` for *host*
491 resolution. If given, these should all be integers from the
492 corresponding :mod:`socket` module constants.
493
494 * *reuse_address* tells the kernel to reuse a local socket in
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700495 ``TIME_WAIT`` state, without waiting for its natural timeout to
Serhiy Storchaka4adf01c2016-10-19 18:30:05 +0300496 expire. If not specified will automatically be set to ``True`` on
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400497 Unix.
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700498
499 * *reuse_port* tells the kernel to allow this endpoint to be bound to the
500 same port as other existing endpoints are bound to, so long as they all
501 set this flag when being created. This option is not supported on Windows
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400502 and some Unixes. If the :py:data:`~socket.SO_REUSEPORT` constant is not
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700503 defined then this capability is unsupported.
504
505 * *allow_broadcast* tells the kernel to allow this endpoint to send
506 messages to the broadcast address.
507
508 * *sock* can optionally be specified in order to use a preexisting,
509 already connected, :class:`socket.socket` object to be used by the
510 transport. If specified, *local_addr* and *remote_addr* should be omitted
511 (must be :const:`None`).
Victor Stinnera6919aa2014-02-19 13:32:34 +0100512
Victor Stinnerc7edffd2014-10-12 11:24:26 +0200513 See :ref:`UDP echo client protocol <asyncio-udp-echo-client-protocol>` and
514 :ref:`UDP echo server protocol <asyncio-udp-echo-server-protocol>` examples.
515
Romuald Brunet0ded5802018-05-14 18:22:00 +0200516 .. versionchanged:: 3.4.4
517 The *family*, *proto*, *flags*, *reuse_address*, *reuse_port,
518 *allow_broadcast*, and *sock* parameters were added.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100519
Andrew Svetlovbafd4b52019-05-28 12:52:15 +0300520 .. versionchanged:: 3.8
521 Added support for Windows.
522
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700523.. coroutinemethod:: loop.create_unix_connection(protocol_factory, \
524 path=None, \*, ssl=None, sock=None, \
525 server_hostname=None, ssl_handshake_timeout=None)
Victor Stinnera6919aa2014-02-19 13:32:34 +0100526
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400527 Create a Unix connection.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100528
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700529 The socket family will be :py:data:`~socket.AF_UNIX`; socket
530 type will be :py:data:`~socket.SOCK_STREAM`.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100531
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700532 A tuple of ``(transport, protocol)`` is returned on success.
Guido van Rossum9e80eeb2016-11-03 14:17:25 -0700533
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400534 *path* is the name of a Unix domain socket and is required,
535 unless a *sock* parameter is specified. Abstract Unix sockets,
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700536 :class:`str`, :class:`bytes`, and :class:`~pathlib.Path` paths are
537 supported.
538
539 See the documentation of the :meth:`loop.create_connection` method
540 for information about arguments to this method.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100541
Cheryl Sabella2d6097d2018-10-12 10:55:20 -0400542 .. availability:: Unix.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100543
Neil Aspinallf7686c12017-12-19 19:45:42 +0000544 .. versionadded:: 3.7
545
546 The *ssl_handshake_timeout* parameter.
547
Yury Selivanov423fd362017-11-20 17:26:28 -0500548 .. versionchanged:: 3.7
549
Elvis Pranskevichusc0d062f2018-06-08 11:36:00 -0400550 The *path* parameter can now be a :term:`path-like object`.
Yury Selivanov423fd362017-11-20 17:26:28 -0500551
Victor Stinnera6919aa2014-02-19 13:32:34 +0100552
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700553Creating network servers
554^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +0100555
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700556.. coroutinemethod:: loop.create_server(protocol_factory, \
557 host=None, port=None, \*, \
558 family=socket.AF_UNSPEC, \
559 flags=socket.AI_PASSIVE, \
560 sock=None, backlog=100, ssl=None, \
561 reuse_address=None, reuse_port=None, \
562 ssl_handshake_timeout=None, start_serving=True)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100563
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700564 Create a TCP server (socket type :data:`~socket.SOCK_STREAM`) listening
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400565 on *port* of the *host* address.
Victor Stinner33f6abe2014-10-12 20:36:04 +0200566
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700567 Returns a :class:`Server` object.
Victor Stinner33f6abe2014-10-12 20:36:04 +0200568
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700569 Arguments:
Victor Stinner33f6abe2014-10-12 20:36:04 +0200570
Bumsik Kim5cc583d2018-09-16 19:40:44 -0400571 * *protocol_factory* must be a callable returning a
572 :ref:`protocol <asyncio-protocol>` implementation.
573
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400574 * The *host* parameter can be set to several types which determine where
575 the server would be listening:
576
577 - If *host* is a string, the TCP server is bound to a single network
578 interface specified by *host*.
579
580 - If *host* is a sequence of strings, the TCP server is bound to all
581 network interfaces specified by the sequence.
582
583 - If *host* is an empty string or ``None``, all interfaces are
584 assumed and a list of multiple sockets will be returned (most likely
585 one for IPv4 and another one for IPv6).
Victor Stinner33f6abe2014-10-12 20:36:04 +0200586
587 * *family* can be set to either :data:`socket.AF_INET` or
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700588 :data:`~socket.AF_INET6` to force the socket to use IPv4 or IPv6.
Carol Willing5b7cbd62018-09-12 17:05:17 -0700589 If not set, the *family* will be determined from host name
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700590 (defaults to :data:`~socket.AF_UNSPEC`).
Victor Stinner33f6abe2014-10-12 20:36:04 +0200591
592 * *flags* is a bitmask for :meth:`getaddrinfo`.
593
594 * *sock* can optionally be specified in order to use a preexisting
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400595 socket object. If specified, *host* and *port* must not be specified.
Victor Stinner33f6abe2014-10-12 20:36:04 +0200596
597 * *backlog* is the maximum number of queued connections passed to
598 :meth:`~socket.socket.listen` (defaults to 100).
599
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400600 * *ssl* can be set to an :class:`~ssl.SSLContext` instance to enable
601 TLS over the accepted connections.
Victor Stinner33f6abe2014-10-12 20:36:04 +0200602
603 * *reuse_address* tells the kernel to reuse a local socket in
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700604 ``TIME_WAIT`` state, without waiting for its natural timeout to
Serhiy Storchaka4adf01c2016-10-19 18:30:05 +0300605 expire. If not specified will automatically be set to ``True`` on
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400606 Unix.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100607
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700608 * *reuse_port* tells the kernel to allow this endpoint to be bound to the
609 same port as other existing endpoints are bound to, so long as they all
610 set this flag when being created. This option is not supported on
611 Windows.
612
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400613 * *ssl_handshake_timeout* is (for a TLS server) the time in seconds to wait
614 for the TLS handshake to complete before aborting the connection.
Yury Selivanov96026432018-06-04 11:32:35 -0400615 ``60.0`` seconds if ``None`` (default).
Neil Aspinallf7686c12017-12-19 19:45:42 +0000616
Yury Selivanovc9070d02018-01-25 18:08:09 -0500617 * *start_serving* set to ``True`` (the default) causes the created server
618 to start accepting connections immediately. When set to ``False``,
619 the user should await on :meth:`Server.start_serving` or
620 :meth:`Server.serve_forever` to make the server to start accepting
621 connections.
622
Neil Aspinallf7686c12017-12-19 19:45:42 +0000623 .. versionadded:: 3.7
624
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700625 Added *ssl_handshake_timeout* and *start_serving* parameters.
626
627 .. versionchanged:: 3.6
628
629 The socket option :py:data:`~socket.TCP_NODELAY` is set by default
630 for all TCP connections.
Neil Aspinallf7686c12017-12-19 19:45:42 +0000631
Victor Stinner60208a12015-09-15 22:41:52 +0200632 .. versionchanged:: 3.5
633
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400634 Added support for SSL/TLS in :class:`ProactorEventLoop`.
Victor Stinnerc8ea8132014-01-23 11:02:09 +0100635
Victor Stinner7b58a2b2015-09-21 18:41:05 +0200636 .. versionchanged:: 3.5.1
Victor Stinner5e4a7d82015-09-21 18:33:43 +0200637
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700638 The *host* parameter can be a sequence of strings.
639
640 .. seealso::
641
642 The :func:`start_server` function is a higher-level alternative API
643 that returns a pair of :class:`StreamReader` and :class:`StreamWriter`
644 that can be used in an async/await code.
Victor Stinner5e4a7d82015-09-21 18:33:43 +0200645
Victor Stinnerea3183f2013-12-03 01:08:00 +0100646
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700647.. coroutinemethod:: loop.create_unix_server(protocol_factory, path=None, \
648 \*, sock=None, backlog=100, ssl=None, \
649 ssl_handshake_timeout=None, start_serving=True)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100650
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700651 Similar to :meth:`loop.create_server` but works with the
652 :py:data:`~socket.AF_UNIX` socket family.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100653
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400654 *path* is the name of a Unix domain socket, and is required,
655 unless a *sock* argument is provided. Abstract Unix sockets,
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700656 :class:`str`, :class:`bytes`, and :class:`~pathlib.Path` paths
657 are supported.
Yury Selivanov423fd362017-11-20 17:26:28 -0500658
Bumsik Kim5cc583d2018-09-16 19:40:44 -0400659 See the documentation of the :meth:`loop.create_server` method
660 for information about arguments to this method.
661
Cheryl Sabella2d6097d2018-10-12 10:55:20 -0400662 .. availability:: Unix.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100663
Neil Aspinallf7686c12017-12-19 19:45:42 +0000664 .. versionadded:: 3.7
665
Elvis Pranskevichusc0d062f2018-06-08 11:36:00 -0400666 The *ssl_handshake_timeout* and *start_serving* parameters.
Neil Aspinallf7686c12017-12-19 19:45:42 +0000667
Yury Selivanov423fd362017-11-20 17:26:28 -0500668 .. versionchanged:: 3.7
669
670 The *path* parameter can now be a :class:`~pathlib.Path` object.
671
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700672.. coroutinemethod:: loop.connect_accepted_socket(protocol_factory, \
673 sock, \*, ssl=None, ssl_handshake_timeout=None)
Yury Selivanov3b3a1412016-11-07 15:35:25 -0500674
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700675 Wrap an already accepted connection into a transport/protocol pair.
Yury Selivanov3b3a1412016-11-07 15:35:25 -0500676
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700677 This method can be used by servers that accept connections outside
678 of asyncio but that use asyncio to handle them.
Yury Selivanov3b3a1412016-11-07 15:35:25 -0500679
680 Parameters:
681
Bumsik Kim5cc583d2018-09-16 19:40:44 -0400682 * *protocol_factory* must be a callable returning a
683 :ref:`protocol <asyncio-protocol>` implementation.
684
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700685 * *sock* is a preexisting socket object returned from
686 :meth:`socket.accept <socket.socket.accept>`.
Yury Selivanov3b3a1412016-11-07 15:35:25 -0500687
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700688 * *ssl* can be set to an :class:`~ssl.SSLContext` to enable SSL over
689 the accepted connections.
Yury Selivanov3b3a1412016-11-07 15:35:25 -0500690
Neil Aspinallf7686c12017-12-19 19:45:42 +0000691 * *ssl_handshake_timeout* is (for an SSL connection) the time in seconds to
692 wait for the SSL handshake to complete before aborting the connection.
Yury Selivanov96026432018-06-04 11:32:35 -0400693 ``60.0`` seconds if ``None`` (default).
Neil Aspinallf7686c12017-12-19 19:45:42 +0000694
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700695 Returns a ``(transport, protocol)`` pair.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100696
Neil Aspinallf7686c12017-12-19 19:45:42 +0000697 .. versionadded:: 3.7
698
699 The *ssl_handshake_timeout* parameter.
700
AraHaan431665b2017-11-21 11:06:26 -0500701 .. versionadded:: 3.5.3
702
703
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700704Transferring files
705^^^^^^^^^^^^^^^^^^
Andrew Svetlov7c684072018-01-27 21:22:47 +0200706
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700707.. coroutinemethod:: loop.sendfile(transport, file, \
708 offset=0, count=None, *, fallback=True)
Andrew Svetlov7c684072018-01-27 21:22:47 +0200709
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700710 Send a *file* over a *transport*. Return the total number of bytes
711 sent.
Andrew Svetlov7c684072018-01-27 21:22:47 +0200712
713 The method uses high-performance :meth:`os.sendfile` if available.
714
715 *file* must be a regular file object opened in binary mode.
716
717 *offset* tells from where to start reading the file. If specified,
718 *count* is the total number of bytes to transmit as opposed to
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400719 sending the file until EOF is reached. File position is always updated,
720 even when this method raises an error, and
721 :meth:`file.tell() <io.IOBase.tell>` can be used to obtain the actual
722 number of bytes sent.
Andrew Svetlov7c684072018-01-27 21:22:47 +0200723
724 *fallback* set to ``True`` makes asyncio to manually read and send
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700725 the file when the platform does not support the sendfile system call
Andrew Svetlov7c684072018-01-27 21:22:47 +0200726 (e.g. Windows or SSL socket on Unix).
727
728 Raise :exc:`SendfileNotAvailableError` if the system does not support
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400729 the *sendfile* syscall and *fallback* is ``False``.
Andrew Svetlov7c684072018-01-27 21:22:47 +0200730
731 .. versionadded:: 3.7
732
733
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500734TLS Upgrade
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700735^^^^^^^^^^^
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500736
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700737.. coroutinemethod:: loop.start_tls(transport, protocol, \
738 sslcontext, \*, server_side=False, \
739 server_hostname=None, ssl_handshake_timeout=None)
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500740
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700741 Upgrade an existing transport-based connection to TLS.
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500742
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700743 Return a new transport instance, that the *protocol* must start using
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500744 immediately after the *await*. The *transport* instance passed to
745 the *start_tls* method should never be used again.
746
747 Parameters:
748
749 * *transport* and *protocol* instances that methods like
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700750 :meth:`~loop.create_server` and
751 :meth:`~loop.create_connection` return.
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500752
753 * *sslcontext*: a configured instance of :class:`~ssl.SSLContext`.
754
755 * *server_side* pass ``True`` when a server-side connection is being
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700756 upgraded (like the one created by :meth:`~loop.create_server`).
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500757
758 * *server_hostname*: sets or overrides the host name that the target
759 server's certificate will be matched against.
760
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400761 * *ssl_handshake_timeout* is (for a TLS connection) the time in seconds to
762 wait for the TLS handshake to complete before aborting the connection.
Yury Selivanov96026432018-06-04 11:32:35 -0400763 ``60.0`` seconds if ``None`` (default).
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500764
765 .. versionadded:: 3.7
766
767
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700768Watching file descriptors
769^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerc1567df2014-02-08 23:22:58 +0100770
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700771.. method:: loop.add_reader(fd, callback, \*args)
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200772
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400773 Start monitoring the *fd* file descriptor for read availability and
774 invoke *callback* with the specified arguments once *fd* is available for
775 reading.
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200776
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700777.. method:: loop.remove_reader(fd)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100778
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400779 Stop monitoring the *fd* file descriptor for read availability.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100780
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700781.. method:: loop.add_writer(fd, callback, \*args)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100782
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400783 Start monitoring the *fd* file descriptor for write availability and
784 invoke *callback* with the specified arguments once *fd* is available for
785 writing.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100786
Yury Selivanove247b462018-09-20 12:43:59 -0400787 Use :func:`functools.partial` :ref:`to pass keyword arguments
Naglis17473342018-12-04 09:31:15 +0200788 <asyncio-pass-keywords>` to *callback*.
Victor Stinner8464c242014-11-28 13:15:41 +0100789
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700790.. method:: loop.remove_writer(fd)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100791
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400792 Stop monitoring the *fd* file descriptor for write availability.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100793
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700794See also :ref:`Platform Support <asyncio-platform-support>` section
795for some limitations of these methods.
Victor Stinner04e6df32014-10-11 16:16:27 +0200796
Victor Stinnerc1567df2014-02-08 23:22:58 +0100797
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700798Working with socket objects directly
799^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerc1567df2014-02-08 23:22:58 +0100800
Carol Willing5b7cbd62018-09-12 17:05:17 -0700801In general, protocol implementations that use transport-based APIs
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700802such as :meth:`loop.create_connection` and :meth:`loop.create_server`
803are faster than implementations that work with sockets directly.
Carol Willing5b7cbd62018-09-12 17:05:17 -0700804However, there are some use cases when performance is not critical, and
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700805working with :class:`~socket.socket` objects directly is more
806convenient.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100807
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700808.. coroutinemethod:: loop.sock_recv(sock, nbytes)
Yury Selivanov55c50842016-06-08 12:48:15 -0400809
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400810 Receive up to *nbytes* from *sock*. Asynchronous version of
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700811 :meth:`socket.recv() <socket.socket.recv>`.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100812
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400813 Return the received data as a bytes object.
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700814
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400815 *sock* must be a non-blocking socket.
Victor Stinnerec2ce092014-07-29 23:12:22 +0200816
Yury Selivanov19a44f62017-12-14 20:53:26 -0500817 .. versionchanged:: 3.7
Carol Willing5b7cbd62018-09-12 17:05:17 -0700818 Even though this method was always documented as a coroutine
819 method, releases before Python 3.7 returned a :class:`Future`.
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700820 Since Python 3.7 this is an ``async def`` method.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100821
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700822.. coroutinemethod:: loop.sock_recv_into(sock, buf)
Antoine Pitrou525f40d2017-10-19 21:46:40 +0200823
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400824 Receive data from *sock* into the *buf* buffer. Modeled after the blocking
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700825 :meth:`socket.recv_into() <socket.socket.recv_into>` method.
Antoine Pitrou525f40d2017-10-19 21:46:40 +0200826
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700827 Return the number of bytes written to the buffer.
Antoine Pitrou525f40d2017-10-19 21:46:40 +0200828
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400829 *sock* must be a non-blocking socket.
Antoine Pitrou525f40d2017-10-19 21:46:40 +0200830
Antoine Pitrou525f40d2017-10-19 21:46:40 +0200831 .. versionadded:: 3.7
832
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700833.. coroutinemethod:: loop.sock_sendall(sock, data)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100834
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400835 Send *data* to the *sock* socket. Asynchronous version of
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700836 :meth:`socket.sendall() <socket.socket.sendall>`.
Yury Selivanov55c50842016-06-08 12:48:15 -0400837
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400838 This method continues to send to the socket until either all data
839 in *data* has been sent or an error occurs. ``None`` is returned
Carol Willing5b7cbd62018-09-12 17:05:17 -0700840 on success. On error, an exception is raised. Additionally, there is no way
841 to determine how much data, if any, was successfully processed by the
842 receiving end of the connection.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100843
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400844 *sock* must be a non-blocking socket.
Victor Stinnerec2ce092014-07-29 23:12:22 +0200845
Yury Selivanov19a44f62017-12-14 20:53:26 -0500846 .. versionchanged:: 3.7
847 Even though the method was always documented as a coroutine
848 method, before Python 3.7 it returned an :class:`Future`.
849 Since Python 3.7, this is an ``async def`` method.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100850
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700851.. coroutinemethod:: loop.sock_connect(sock, address)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100852
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400853 Connect *sock* to a remote socket at *address*.
Victor Stinner1b0580b2014-02-13 09:24:37 +0100854
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700855 Asynchronous version of :meth:`socket.connect() <socket.socket.connect>`.
856
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400857 *sock* must be a non-blocking socket.
Victor Stinnerec2ce092014-07-29 23:12:22 +0200858
Yury Selivanov55c50842016-06-08 12:48:15 -0400859 .. versionchanged:: 3.5.2
860 ``address`` no longer needs to be resolved. ``sock_connect``
861 will try to check if the *address* is already resolved by calling
862 :func:`socket.inet_pton`. If not,
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700863 :meth:`loop.getaddrinfo` will be used to resolve the
Yury Selivanov55c50842016-06-08 12:48:15 -0400864 *address*.
865
Victor Stinnerc1567df2014-02-08 23:22:58 +0100866 .. seealso::
867
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700868 :meth:`loop.create_connection`
Yury Selivanov55c50842016-06-08 12:48:15 -0400869 and :func:`asyncio.open_connection() <open_connection>`.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100870
871
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700872.. coroutinemethod:: loop.sock_accept(sock)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100873
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700874 Accept a connection. Modeled after the blocking
875 :meth:`socket.accept() <socket.socket.accept>` method.
Yury Selivanov55c50842016-06-08 12:48:15 -0400876
877 The socket must be bound to an address and listening
Victor Stinnerc1567df2014-02-08 23:22:58 +0100878 for connections. The return value is a pair ``(conn, address)`` where *conn*
879 is a *new* socket object usable to send and receive data on the connection,
880 and *address* is the address bound to the socket on the other end of the
881 connection.
882
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400883 *sock* must be a non-blocking socket.
Victor Stinnerec2ce092014-07-29 23:12:22 +0200884
Yury Selivanov19a44f62017-12-14 20:53:26 -0500885 .. versionchanged:: 3.7
886 Even though the method was always documented as a coroutine
887 method, before Python 3.7 it returned a :class:`Future`.
888 Since Python 3.7, this is an ``async def`` method.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100889
890 .. seealso::
891
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700892 :meth:`loop.create_server` and :func:`start_server`.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100893
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700894.. coroutinemethod:: loop.sock_sendfile(sock, file, offset=0, count=None, \
895 \*, fallback=True)
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200896
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700897 Send a file using high-performance :mod:`os.sendfile` if possible.
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400898 Return the total number of bytes sent.
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200899
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700900 Asynchronous version of :meth:`socket.sendfile() <socket.socket.sendfile>`.
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200901
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400902 *sock* must be a non-blocking :const:`socket.SOCK_STREAM`
903 :class:`~socket.socket`.
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200904
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400905 *file* must be a regular file object open in binary mode.
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200906
907 *offset* tells from where to start reading the file. If specified,
908 *count* is the total number of bytes to transmit as opposed to
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400909 sending the file until EOF is reached. File position is always updated,
910 even when this method raises an error, and
911 :meth:`file.tell() <io.IOBase.tell>` can be used to obtain the actual
912 number of bytes sent.
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200913
Carol Willing5b7cbd62018-09-12 17:05:17 -0700914 *fallback*, when set to ``True``, makes asyncio manually read and send
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200915 the file when the platform does not support the sendfile syscall
916 (e.g. Windows or SSL socket on Unix).
917
Andrew Svetlov7464e872018-01-19 20:04:29 +0200918 Raise :exc:`SendfileNotAvailableError` if the system does not support
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200919 *sendfile* syscall and *fallback* is ``False``.
920
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400921 *sock* must be a non-blocking socket.
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700922
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200923 .. versionadded:: 3.7
924
Victor Stinnerc1567df2014-02-08 23:22:58 +0100925
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700926DNS
927^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +0100928
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700929.. coroutinemethod:: loop.getaddrinfo(host, port, \*, family=0, \
930 type=0, proto=0, flags=0)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100931
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700932 Asynchronous version of :meth:`socket.getaddrinfo`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100933
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700934.. coroutinemethod:: loop.getnameinfo(sockaddr, flags=0)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100935
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700936 Asynchronous version of :meth:`socket.getnameinfo`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100937
Yury Selivanovbec23722018-01-28 14:09:40 -0500938.. versionchanged:: 3.7
939 Both *getaddrinfo* and *getnameinfo* methods were always documented
940 to return a coroutine, but prior to Python 3.7 they were, in fact,
941 returning :class:`asyncio.Future` objects. Starting with Python 3.7
942 both methods are coroutines.
943
Victor Stinnerea3183f2013-12-03 01:08:00 +0100944
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700945Working with pipes
946^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +0100947
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700948.. coroutinemethod:: loop.connect_read_pipe(protocol_factory, pipe)
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200949
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400950 Register the read end of *pipe* in the event loop.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100951
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700952 *protocol_factory* must be a callable returning an
953 :ref:`asyncio protocol <asyncio-protocol>` implementation.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100954
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700955 *pipe* is a :term:`file-like object <file object>`.
956
957 Return pair ``(transport, protocol)``, where *transport* supports
Bumsik Kim5cc583d2018-09-16 19:40:44 -0400958 the :class:`ReadTransport` interface and *protocol* is an object
959 instantiated by the *protocol_factory*.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100960
Victor Stinnerd84fd732014-08-26 01:01:59 +0200961 With :class:`SelectorEventLoop` event loop, the *pipe* is set to
962 non-blocking mode.
963
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700964.. coroutinemethod:: loop.connect_write_pipe(protocol_factory, pipe)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100965
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400966 Register the write end of *pipe* in the event loop.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100967
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700968 *protocol_factory* must be a callable returning an
969 :ref:`asyncio protocol <asyncio-protocol>` implementation.
970
971 *pipe* is :term:`file-like object <file object>`.
972
Victor Stinner2cef3002014-10-23 22:38:46 +0200973 Return pair ``(transport, protocol)``, where *transport* supports
Bumsik Kim5cc583d2018-09-16 19:40:44 -0400974 :class:`WriteTransport` interface and *protocol* is an object
975 instantiated by the *protocol_factory*.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100976
Victor Stinnerd84fd732014-08-26 01:01:59 +0200977 With :class:`SelectorEventLoop` event loop, the *pipe* is set to
978 non-blocking mode.
979
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700980.. note::
981
982 :class:`SelectorEventLoop` does not support the above methods on
Carol Willing5b7cbd62018-09-12 17:05:17 -0700983 Windows. Use :class:`ProactorEventLoop` instead for Windows.
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700984
Victor Stinner08444382014-02-02 22:43:39 +0100985.. seealso::
986
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700987 The :meth:`loop.subprocess_exec` and
988 :meth:`loop.subprocess_shell` methods.
Victor Stinner08444382014-02-02 22:43:39 +0100989
Victor Stinnerea3183f2013-12-03 01:08:00 +0100990
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400991Unix signals
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700992^^^^^^^^^^^^
Victor Stinner8b863482014-01-27 10:07:50 +0100993
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700994.. method:: loop.add_signal_handler(signum, callback, \*args)
Victor Stinner8b863482014-01-27 10:07:50 +0100995
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400996 Set *callback* as the handler for the *signum* signal.
Victor Stinner8b863482014-01-27 10:07:50 +0100997
Hrvoje Nikšiće3666fc2018-12-18 22:31:29 +0100998 The callback will be invoked by *loop*, along with other queued callbacks
999 and runnable coroutines of that event loop. Unlike signal handlers
1000 registered using :func:`signal.signal`, a callback registered with this
1001 function is allowed to interact with the event loop.
1002
Victor Stinner8b863482014-01-27 10:07:50 +01001003 Raise :exc:`ValueError` if the signal number is invalid or uncatchable.
1004 Raise :exc:`RuntimeError` if there is a problem setting up the handler.
1005
Yury Selivanove247b462018-09-20 12:43:59 -04001006 Use :func:`functools.partial` :ref:`to pass keyword arguments
Naglis17473342018-12-04 09:31:15 +02001007 <asyncio-pass-keywords>` to *callback*.
Victor Stinner8464c242014-11-28 13:15:41 +01001008
Hrvoje Nikšiće3666fc2018-12-18 22:31:29 +01001009 Like :func:`signal.signal`, this function must be invoked in the main
1010 thread.
1011
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001012.. method:: loop.remove_signal_handler(sig)
Victor Stinner8b863482014-01-27 10:07:50 +01001013
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001014 Remove the handler for the *sig* signal.
Victor Stinner8b863482014-01-27 10:07:50 +01001015
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001016 Return ``True`` if the signal handler was removed, or ``False`` if
1017 no handler was set for the given signal.
Victor Stinner8b863482014-01-27 10:07:50 +01001018
Cheryl Sabella2d6097d2018-10-12 10:55:20 -04001019 .. availability:: Unix.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001020
Victor Stinner8b863482014-01-27 10:07:50 +01001021.. seealso::
1022
1023 The :mod:`signal` module.
1024
1025
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001026Executing code in thread or process pools
1027^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +01001028
Yury Selivanov47150392018-09-18 17:55:44 -04001029.. awaitablemethod:: loop.run_in_executor(executor, func, \*args)
Victor Stinnerea3183f2013-12-03 01:08:00 +01001030
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001031 Arrange for *func* to be called in the specified executor.
Victor Stinnerea3183f2013-12-03 01:08:00 +01001032
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001033 The *executor* argument should be an :class:`concurrent.futures.Executor`
Larry Hastings3732ed22014-03-15 21:13:56 -07001034 instance. The default executor is used if *executor* is ``None``.
Victor Stinnerea3183f2013-12-03 01:08:00 +01001035
Yury Selivanove247b462018-09-20 12:43:59 -04001036 Example::
1037
1038 import asyncio
1039 import concurrent.futures
1040
1041 def blocking_io():
1042 # File operations (such as logging) can block the
1043 # event loop: run them in a thread pool.
1044 with open('/dev/urandom', 'rb') as f:
1045 return f.read(100)
1046
1047 def cpu_bound():
1048 # CPU-bound operations will block the event loop:
1049 # in general it is preferable to run them in a
1050 # process pool.
1051 return sum(i * i for i in range(10 ** 7))
1052
1053 async def main():
1054 loop = asyncio.get_running_loop()
1055
1056 ## Options:
1057
1058 # 1. Run in the default loop's executor:
1059 result = await loop.run_in_executor(
1060 None, blocking_io)
1061 print('default thread pool', result)
1062
1063 # 2. Run in a custom thread pool:
1064 with concurrent.futures.ThreadPoolExecutor() as pool:
1065 result = await loop.run_in_executor(
1066 pool, blocking_io)
1067 print('custom thread pool', result)
1068
1069 # 3. Run in a custom process pool:
1070 with concurrent.futures.ProcessPoolExecutor() as pool:
1071 result = await loop.run_in_executor(
1072 pool, cpu_bound)
1073 print('custom process pool', result)
1074
1075 asyncio.run(main())
Victor Stinner8464c242014-11-28 13:15:41 +01001076
Yury Selivanovbec23722018-01-28 14:09:40 -05001077 This method returns a :class:`asyncio.Future` object.
1078
Yury Selivanove247b462018-09-20 12:43:59 -04001079 Use :func:`functools.partial` :ref:`to pass keyword arguments
1080 <asyncio-pass-keywords>` to *func*.
1081
Yury Selivanove8a60452016-10-21 17:40:42 -04001082 .. versionchanged:: 3.5.3
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001083 :meth:`loop.run_in_executor` no longer configures the
Yury Selivanove8a60452016-10-21 17:40:42 -04001084 ``max_workers`` of the thread pool executor it creates, instead
1085 leaving it up to the thread pool executor
1086 (:class:`~concurrent.futures.ThreadPoolExecutor`) to set the
1087 default.
1088
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001089.. method:: loop.set_default_executor(executor)
Victor Stinnerea3183f2013-12-03 01:08:00 +01001090
Elvis Pranskevichus22d25082018-07-30 11:42:43 +01001091 Set *executor* as the default executor used by :meth:`run_in_executor`.
1092 *executor* should be an instance of
1093 :class:`~concurrent.futures.ThreadPoolExecutor`.
1094
1095 .. deprecated:: 3.8
1096 Using an executor that is not an instance of
1097 :class:`~concurrent.futures.ThreadPoolExecutor` is deprecated and
1098 will trigger an error in Python 3.9.
Victor Stinnerea3183f2013-12-03 01:08:00 +01001099
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001100 *executor* must be an instance of
1101 :class:`concurrent.futures.ThreadPoolExecutor`.
1102
Victor Stinnerea3183f2013-12-03 01:08:00 +01001103
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001104Error Handling API
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001105^^^^^^^^^^^^^^^^^^
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001106
Martin Panterc04fb562016-02-10 05:44:01 +00001107Allows customizing how exceptions are handled in the event loop.
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001108
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001109.. method:: loop.set_exception_handler(handler)
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001110
1111 Set *handler* as the new event loop exception handler.
1112
1113 If *handler* is ``None``, the default exception handler will
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001114 be set. Otherwise, *handler* must be a callable with the signature
1115 matching ``(loop, context)``, where ``loop``
1116 is a reference to the active event loop, and ``context``
1117 is a ``dict`` object containing the details of the exception
1118 (see :meth:`call_exception_handler` documentation for details
1119 about context).
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001120
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001121.. method:: loop.get_exception_handler()
Yury Selivanov950204d2016-05-16 16:23:00 -04001122
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001123 Return the current exception handler, or ``None`` if no custom
1124 exception handler was set.
Yury Selivanov950204d2016-05-16 16:23:00 -04001125
1126 .. versionadded:: 3.5.2
1127
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001128.. method:: loop.default_exception_handler(context)
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001129
1130 Default exception handler.
1131
1132 This is called when an exception occurs and no exception
Carol Willing5b7cbd62018-09-12 17:05:17 -07001133 handler is set. This can be called by a custom exception
1134 handler that wants to defer to the default handler behavior.
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001135
1136 *context* parameter has the same meaning as in
1137 :meth:`call_exception_handler`.
1138
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001139.. method:: loop.call_exception_handler(context)
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001140
1141 Call the current event loop exception handler.
1142
1143 *context* is a ``dict`` object containing the following keys
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001144 (new keys may be introduced in future Python versions):
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001145
1146 * 'message': Error message;
1147 * 'exception' (optional): Exception object;
1148 * 'future' (optional): :class:`asyncio.Future` instance;
1149 * 'handle' (optional): :class:`asyncio.Handle` instance;
1150 * 'protocol' (optional): :ref:`Protocol <asyncio-protocol>` instance;
1151 * 'transport' (optional): :ref:`Transport <asyncio-transport>` instance;
1152 * 'socket' (optional): :class:`socket.socket` instance.
1153
1154 .. note::
1155
Carol Willing5b7cbd62018-09-12 17:05:17 -07001156 This method should not be overloaded in subclassed
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001157 event loops. For custom exception handling, use
1158 the :meth:`set_exception_handler()` method.
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001159
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001160Enabling debug mode
1161^^^^^^^^^^^^^^^^^^^
Victor Stinner0f3e6bc2014-02-19 23:15:02 +01001162
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001163.. method:: loop.get_debug()
Victor Stinner0f3e6bc2014-02-19 23:15:02 +01001164
Victor Stinner7b7120e2014-06-23 00:12:14 +02001165 Get the debug mode (:class:`bool`) of the event loop.
1166
1167 The default value is ``True`` if the environment variable
1168 :envvar:`PYTHONASYNCIODEBUG` is set to a non-empty string, ``False``
1169 otherwise.
Victor Stinner0f3e6bc2014-02-19 23:15:02 +01001170
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001171.. method:: loop.set_debug(enabled: bool)
Victor Stinner0f3e6bc2014-02-19 23:15:02 +01001172
1173 Set the debug mode of the event loop.
1174
Yury Selivanov805e27e2018-09-14 16:57:11 -07001175 .. versionchanged:: 3.7
1176
1177 The new ``-X dev`` command line option can now also be used
1178 to enable the debug mode.
1179
Victor Stinner0f3e6bc2014-02-19 23:15:02 +01001180.. seealso::
1181
Victor Stinner62511fd2014-06-23 00:36:11 +02001182 The :ref:`debug mode of asyncio <asyncio-debug-mode>`.
Victor Stinner0f3e6bc2014-02-19 23:15:02 +01001183
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001184
1185Running Subprocesses
1186^^^^^^^^^^^^^^^^^^^^
1187
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001188Methods described in this subsections are low-level. In regular
1189async/await code consider using the high-level
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001190:func:`asyncio.create_subprocess_shell` and
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001191:func:`asyncio.create_subprocess_exec` convenience functions instead.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001192
1193.. note::
1194
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001195 The default asyncio event loop on **Windows** does not support
1196 subprocesses. See :ref:`Subprocess Support on Windows
1197 <asyncio-windows-subprocess>` for details.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001198
1199.. coroutinemethod:: loop.subprocess_exec(protocol_factory, \*args, \
1200 stdin=subprocess.PIPE, stdout=subprocess.PIPE, \
1201 stderr=subprocess.PIPE, \*\*kwargs)
1202
1203 Create a subprocess from one or more string arguments specified by
1204 *args*.
1205
1206 *args* must be a list of strings represented by:
1207
1208 * :class:`str`;
1209 * or :class:`bytes`, encoded to the
1210 :ref:`filesystem encoding <filesystem-encoding>`.
1211
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001212 The first string specifies the program executable,
Carol Willing5b7cbd62018-09-12 17:05:17 -07001213 and the remaining strings specify the arguments. Together, string
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001214 arguments form the ``argv`` of the program.
1215
1216 This is similar to the standard library :class:`subprocess.Popen`
1217 class called with ``shell=False`` and the list of strings passed as
1218 the first argument; however, where :class:`~subprocess.Popen` takes
1219 a single argument which is list of strings, *subprocess_exec*
1220 takes multiple string arguments.
1221
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001222 The *protocol_factory* must be a callable returning a subclass of the
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001223 :class:`asyncio.SubprocessProtocol` class.
1224
1225 Other parameters:
1226
sbstpf0d4c642019-05-27 19:51:19 -04001227 * *stdin* can be any of these:
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001228
sbstpf0d4c642019-05-27 19:51:19 -04001229 * a file-like object representing a pipe to be connected to the
1230 subprocess's standard input stream using
1231 :meth:`~loop.connect_write_pipe`
1232 * the :const:`subprocess.PIPE` constant (default) which will create a new
1233 pipe and connect it,
1234 * the value ``None`` which will make the subprocess inherit the file
1235 descriptor from this process
1236 * the :const:`subprocess.DEVNULL` constant which indicates that the
1237 special :data:`os.devnull` file will be used
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001238
sbstpf0d4c642019-05-27 19:51:19 -04001239 * *stdout* can be any of these:
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001240
sbstpf0d4c642019-05-27 19:51:19 -04001241 * a file-like object representing a pipe to be connected to the
1242 subprocess's standard output stream using
1243 :meth:`~loop.connect_write_pipe`
1244 * the :const:`subprocess.PIPE` constant (default) which will create a new
1245 pipe and connect it,
1246 * the value ``None`` which will make the subprocess inherit the file
1247 descriptor from this process
1248 * the :const:`subprocess.DEVNULL` constant which indicates that the
1249 special :data:`os.devnull` file will be used
1250
1251 * *stderr* can be any of these:
1252
1253 * a file-like object representing a pipe to be connected to the
1254 subprocess's standard error stream using
1255 :meth:`~loop.connect_write_pipe`
1256 * the :const:`subprocess.PIPE` constant (default) which will create a new
1257 pipe and connect it,
1258 * the value ``None`` which will make the subprocess inherit the file
1259 descriptor from this process
1260 * the :const:`subprocess.DEVNULL` constant which indicates that the
1261 special :data:`os.devnull` file will be used
1262 * the :const:`subprocess.STDOUT` constant which will connect the standard
1263 error stream to the process' standard output stream
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001264
1265 * All other keyword arguments are passed to :class:`subprocess.Popen`
sbstpf0d4c642019-05-27 19:51:19 -04001266 without interpretation, except for *bufsize*, *universal_newlines*,
1267 *shell*, *text*, *encoding* and *errors*, which should not be specified
1268 at all.
1269
1270 The ``asyncio`` subprocess API does not support decoding the streams
1271 as text. :func:`bytes.decode` can be used to convert the bytes returned
1272 from the stream to text.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001273
1274 See the constructor of the :class:`subprocess.Popen` class
1275 for documentation on other arguments.
1276
1277 Returns a pair of ``(transport, protocol)``, where *transport*
Bumsik Kim5cc583d2018-09-16 19:40:44 -04001278 conforms to the :class:`asyncio.SubprocessTransport` base class and
1279 *protocol* is an object instantiated by the *protocol_factory*.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001280
1281.. coroutinemethod:: loop.subprocess_shell(protocol_factory, cmd, \*, \
1282 stdin=subprocess.PIPE, stdout=subprocess.PIPE, \
1283 stderr=subprocess.PIPE, \*\*kwargs)
1284
1285 Create a subprocess from *cmd*, which can be a :class:`str` or a
1286 :class:`bytes` string encoded to the
1287 :ref:`filesystem encoding <filesystem-encoding>`,
1288 using the platform's "shell" syntax.
1289
1290 This is similar to the standard library :class:`subprocess.Popen`
1291 class called with ``shell=True``.
1292
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001293 The *protocol_factory* must be a callable returning a subclass of the
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001294 :class:`SubprocessProtocol` class.
1295
1296 See :meth:`~loop.subprocess_exec` for more details about
1297 the remaining arguments.
1298
1299 Returns a pair of ``(transport, protocol)``, where *transport*
Bumsik Kim5cc583d2018-09-16 19:40:44 -04001300 conforms to the :class:`SubprocessTransport` base class and
1301 *protocol* is an object instantiated by the *protocol_factory*.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001302
1303.. note::
1304 It is the application's responsibility to ensure that all whitespace
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001305 and special characters are quoted appropriately to avoid `shell injection
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001306 <https://en.wikipedia.org/wiki/Shell_injection#Shell_injection>`_
1307 vulnerabilities. The :func:`shlex.quote` function can be used to
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001308 properly escape whitespace and special characters in strings that
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001309 are going to be used to construct shell commands.
1310
1311
1312Callback Handles
1313================
1314
1315.. class:: Handle
1316
1317 A callback wrapper object returned by :meth:`loop.call_soon`,
1318 :meth:`loop.call_soon_threadsafe`.
1319
1320 .. method:: cancel()
1321
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001322 Cancel the callback. If the callback has already been canceled
1323 or executed, this method has no effect.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001324
1325 .. method:: cancelled()
1326
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001327 Return ``True`` if the callback was cancelled.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001328
1329 .. versionadded:: 3.7
1330
1331.. class:: TimerHandle
1332
1333 A callback wrapper object returned by :meth:`loop.call_later`,
1334 and :meth:`loop.call_at`.
1335
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001336 This class is a subclass of :class:`Handle`.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001337
1338 .. method:: when()
1339
1340 Return a scheduled callback time as :class:`float` seconds.
1341
1342 The time is an absolute timestamp, using the same time
1343 reference as :meth:`loop.time`.
1344
1345 .. versionadded:: 3.7
1346
1347
1348Server Objects
1349==============
1350
1351Server objects are created by :meth:`loop.create_server`,
1352:meth:`loop.create_unix_server`, :func:`start_server`,
1353and :func:`start_unix_server` functions.
1354
1355Do not instantiate the class directly.
Victor Stinner8c462c52014-01-24 18:11:43 +01001356
Victor Stinner8ebeb032014-07-11 23:47:40 +02001357.. class:: Server
Victor Stinner8c462c52014-01-24 18:11:43 +01001358
Yury Selivanovc9070d02018-01-25 18:08:09 -05001359 *Server* objects are asynchronous context managers. When used in an
1360 ``async with`` statement, it's guaranteed that the Server object is
1361 closed and not accepting new connections when the ``async with``
1362 statement is completed::
1363
1364 srv = await loop.create_server(...)
1365
1366 async with srv:
1367 # some code
1368
Carol Willing5b7cbd62018-09-12 17:05:17 -07001369 # At this point, srv is closed and no longer accepts new connections.
Yury Selivanovc9070d02018-01-25 18:08:09 -05001370
1371
1372 .. versionchanged:: 3.7
1373 Server object is an asynchronous context manager since Python 3.7.
Victor Stinner8c462c52014-01-24 18:11:43 +01001374
1375 .. method:: close()
1376
Victor Stinner4bfb14a2014-07-12 03:20:24 +02001377 Stop serving: close listening sockets and set the :attr:`sockets`
1378 attribute to ``None``.
1379
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001380 The sockets that represent existing incoming client connections
1381 are left open.
Victor Stinner8ebeb032014-07-11 23:47:40 +02001382
Berker Peksag49c9edf2016-01-20 07:14:22 +02001383 The server is closed asynchronously, use the :meth:`wait_closed`
1384 coroutine to wait until the server is closed.
Victor Stinner8c462c52014-01-24 18:11:43 +01001385
Srinivas Reddy Thatiparthy (శ్రీనివాస్ రెడ్డి తాటిపర్తి)1634fc22017-12-30 20:39:32 +05301386 .. method:: get_loop()
1387
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001388 Return the event loop associated with the server object.
Srinivas Reddy Thatiparthy (శ్రీనివాస్ రెడ్డి తాటిపర్తి)1634fc22017-12-30 20:39:32 +05301389
1390 .. versionadded:: 3.7
1391
Yury Selivanovc9070d02018-01-25 18:08:09 -05001392 .. coroutinemethod:: start_serving()
1393
1394 Start accepting connections.
1395
1396 This method is idempotent, so it can be called when
1397 the server is already being serving.
1398
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001399 The *start_serving* keyword-only parameter to
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001400 :meth:`loop.create_server` and
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001401 :meth:`asyncio.start_server` allows creating a Server object
1402 that is not accepting connections initially. In this case
1403 ``Server.start_serving()``, or :meth:`Server.serve_forever` can be used
1404 to make the Server start accepting connections.
Yury Selivanovc9070d02018-01-25 18:08:09 -05001405
1406 .. versionadded:: 3.7
1407
1408 .. coroutinemethod:: serve_forever()
1409
1410 Start accepting connections until the coroutine is cancelled.
1411 Cancellation of ``serve_forever`` task causes the server
1412 to be closed.
1413
1414 This method can be called if the server is already accepting
1415 connections. Only one ``serve_forever`` task can exist per
1416 one *Server* object.
1417
1418 Example::
1419
1420 async def client_connected(reader, writer):
1421 # Communicate with the client with
1422 # reader/writer streams. For example:
1423 await reader.readline()
1424
1425 async def main(host, port):
1426 srv = await asyncio.start_server(
1427 client_connected, host, port)
Andrew Svetlov17ab8f02018-02-17 19:44:35 +02001428 await srv.serve_forever()
Yury Selivanovc9070d02018-01-25 18:08:09 -05001429
1430 asyncio.run(main('127.0.0.1', 0))
1431
1432 .. versionadded:: 3.7
1433
1434 .. method:: is_serving()
1435
1436 Return ``True`` if the server is accepting new connections.
1437
1438 .. versionadded:: 3.7
1439
Victor Stinnerbdd574d2015-02-12 22:49:18 +01001440 .. coroutinemethod:: wait_closed()
Victor Stinner8c462c52014-01-24 18:11:43 +01001441
Victor Stinner8ebeb032014-07-11 23:47:40 +02001442 Wait until the :meth:`close` method completes.
1443
Victor Stinner8ebeb032014-07-11 23:47:40 +02001444 .. attribute:: sockets
1445
Emmanuel Ariasdf5cdc12019-02-22 14:34:41 -03001446 List of :class:`socket.socket` objects the server is listening on.
Victor Stinner8c462c52014-01-24 18:11:43 +01001447
Yury Selivanovc9070d02018-01-25 18:08:09 -05001448 .. versionchanged:: 3.7
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001449 Prior to Python 3.7 ``Server.sockets`` used to return an
1450 internal list of server sockets directly. In 3.7 a copy
Yury Selivanovc9070d02018-01-25 18:08:09 -05001451 of that list is returned.
1452
Victor Stinner8c462c52014-01-24 18:11:43 +01001453
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001454.. _asyncio-event-loops:
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001455
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001456Event Loop Implementations
1457==========================
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001458
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001459asyncio ships with two different event loop implementations:
1460:class:`SelectorEventLoop` and :class:`ProactorEventLoop`.
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001461
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001462By default asyncio is configured to use :class:`SelectorEventLoop`
1463on all platforms.
Andrew Svetlov3d4dbd82018-02-01 19:59:32 +02001464
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001465
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001466.. class:: SelectorEventLoop
1467
1468 An event loop based on the :mod:`selectors` module.
1469
1470 Uses the most efficient *selector* available for the given
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001471 platform. It is also possible to manually configure the
1472 exact selector implementation to be used::
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001473
1474 import asyncio
1475 import selectors
1476
1477 selector = selectors.SelectSelector()
1478 loop = asyncio.SelectorEventLoop(selector)
1479 asyncio.set_event_loop(loop)
Andrew Svetlov7464e872018-01-19 20:04:29 +02001480
1481
Cheryl Sabella2d6097d2018-10-12 10:55:20 -04001482 .. availability:: Unix, Windows.
Andrew Svetlov7464e872018-01-19 20:04:29 +02001483
1484
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001485.. class:: ProactorEventLoop
1486
1487 An event loop for Windows that uses "I/O Completion Ports" (IOCP).
1488
Cheryl Sabella2d6097d2018-10-12 10:55:20 -04001489 .. availability:: Windows.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001490
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001491 .. seealso::
1492
1493 `MSDN documentation on I/O Completion Ports
1494 <https://docs.microsoft.com/en-ca/windows/desktop/FileIO/i-o-completion-ports>`_.
1495
1496
1497.. class:: AbstractEventLoop
1498
1499 Abstract base class for asyncio-compliant event loops.
1500
1501 The :ref:`Event Loop Methods <asyncio-event-loop>` section lists all
1502 methods that an alternative implementation of ``AbstractEventLoop``
1503 should have defined.
1504
1505
1506Examples
1507========
1508
1509Note that all examples in this section **purposefully** show how
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001510to use the low-level event loop APIs, such as :meth:`loop.run_forever`
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001511and :meth:`loop.call_soon`. Modern asyncio applications rarely
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001512need to be written this way; consider using the high-level functions
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001513like :func:`asyncio.run`.
1514
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001515
Yury Selivanov394374e2018-09-17 15:35:24 -04001516.. _asyncio_example_lowlevel_helloworld:
Victor Stinnerea3183f2013-12-03 01:08:00 +01001517
Victor Stinner7f314ed2014-10-15 18:49:16 +02001518Hello World with call_soon()
Victor Stinnera092a612015-01-09 15:58:41 +01001519^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +01001520
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001521An example using the :meth:`loop.call_soon` method to schedule a
1522callback. The callback displays ``"Hello World"`` and then stops the
1523event loop::
Victor Stinnerea3183f2013-12-03 01:08:00 +01001524
1525 import asyncio
1526
Victor Stinner7f314ed2014-10-15 18:49:16 +02001527 def hello_world(loop):
Carol Willing5b7cbd62018-09-12 17:05:17 -07001528 """A callback to print 'Hello World' and stop the event loop"""
Victor Stinnerea3183f2013-12-03 01:08:00 +01001529 print('Hello World')
Victor Stinner7f314ed2014-10-15 18:49:16 +02001530 loop.stop()
Victor Stinnerea3183f2013-12-03 01:08:00 +01001531
1532 loop = asyncio.get_event_loop()
Victor Stinner7f314ed2014-10-15 18:49:16 +02001533
1534 # Schedule a call to hello_world()
1535 loop.call_soon(hello_world, loop)
1536
1537 # Blocking call interrupted by loop.stop()
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001538 try:
1539 loop.run_forever()
1540 finally:
1541 loop.close()
Victor Stinnerea3183f2013-12-03 01:08:00 +01001542
Victor Stinner3e09e322013-12-03 01:22:06 +01001543.. seealso::
Victor Stinnerea3183f2013-12-03 01:08:00 +01001544
Yury Selivanov3faaa882018-09-14 13:32:07 -07001545 A similar :ref:`Hello World <coroutine>`
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001546 example created with a coroutine and the :func:`run` function.
Victor Stinnerea3183f2013-12-03 01:08:00 +01001547
Victor Stinner8b863482014-01-27 10:07:50 +01001548
Yury Selivanov394374e2018-09-17 15:35:24 -04001549.. _asyncio_example_call_later:
Victor Stinner7f314ed2014-10-15 18:49:16 +02001550
1551Display the current date with call_later()
Victor Stinnera092a612015-01-09 15:58:41 +01001552^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinner7f314ed2014-10-15 18:49:16 +02001553
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001554An example of a callback displaying the current date every second. The
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001555callback uses the :meth:`loop.call_later` method to reschedule itself
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001556after 5 seconds, and then stops the event loop::
Victor Stinner7f314ed2014-10-15 18:49:16 +02001557
1558 import asyncio
1559 import datetime
1560
1561 def display_date(end_time, loop):
1562 print(datetime.datetime.now())
1563 if (loop.time() + 1.0) < end_time:
1564 loop.call_later(1, display_date, end_time, loop)
1565 else:
1566 loop.stop()
1567
1568 loop = asyncio.get_event_loop()
1569
1570 # Schedule the first call to display_date()
1571 end_time = loop.time() + 5.0
1572 loop.call_soon(display_date, end_time, loop)
1573
1574 # Blocking call interrupted by loop.stop()
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001575 try:
1576 loop.run_forever()
1577 finally:
1578 loop.close()
Victor Stinner7f314ed2014-10-15 18:49:16 +02001579
1580.. seealso::
1581
Yury Selivanov7372c3b2018-09-14 15:11:24 -07001582 A similar :ref:`current date <asyncio_example_sleep>` example
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001583 created with a coroutine and the :func:`run` function.
Victor Stinner7f314ed2014-10-15 18:49:16 +02001584
1585
Yury Selivanov394374e2018-09-17 15:35:24 -04001586.. _asyncio_example_watch_fd:
Victor Stinner8b863482014-01-27 10:07:50 +01001587
Victor Stinner04e6df32014-10-11 16:16:27 +02001588Watch a file descriptor for read events
Victor Stinnera092a612015-01-09 15:58:41 +01001589^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinner04e6df32014-10-11 16:16:27 +02001590
1591Wait until a file descriptor received some data using the
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001592:meth:`loop.add_reader` method and then close the event loop::
Victor Stinner04e6df32014-10-11 16:16:27 +02001593
1594 import asyncio
Victor Stinnerac577d72017-11-28 21:33:20 +01001595 from socket import socketpair
Victor Stinner04e6df32014-10-11 16:16:27 +02001596
1597 # Create a pair of connected file descriptors
Victor Stinnerccd8e342014-10-11 16:30:02 +02001598 rsock, wsock = socketpair()
Carol Willing5b7cbd62018-09-12 17:05:17 -07001599
Victor Stinner04e6df32014-10-11 16:16:27 +02001600 loop = asyncio.get_event_loop()
1601
1602 def reader():
1603 data = rsock.recv(100)
1604 print("Received:", data.decode())
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001605
Victor Stinner2cef3002014-10-23 22:38:46 +02001606 # We are done: unregister the file descriptor
Victor Stinner04e6df32014-10-11 16:16:27 +02001607 loop.remove_reader(rsock)
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001608
Victor Stinner04e6df32014-10-11 16:16:27 +02001609 # Stop the event loop
1610 loop.stop()
1611
Victor Stinner2cef3002014-10-23 22:38:46 +02001612 # Register the file descriptor for read event
Victor Stinner04e6df32014-10-11 16:16:27 +02001613 loop.add_reader(rsock, reader)
1614
1615 # Simulate the reception of data from the network
1616 loop.call_soon(wsock.send, 'abc'.encode())
1617
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001618 try:
1619 # Run the event loop
1620 loop.run_forever()
1621 finally:
Carol Willing5b7cbd62018-09-12 17:05:17 -07001622 # We are done. Close sockets and the event loop.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001623 rsock.close()
1624 wsock.close()
1625 loop.close()
Victor Stinner04e6df32014-10-11 16:16:27 +02001626
1627.. seealso::
1628
Yury Selivanov394374e2018-09-17 15:35:24 -04001629 * A similar :ref:`example <asyncio_example_create_connection>`
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001630 using transports, protocols, and the
1631 :meth:`loop.create_connection` method.
Victor Stinner04e6df32014-10-11 16:16:27 +02001632
Yury Selivanov394374e2018-09-17 15:35:24 -04001633 * Another similar :ref:`example <asyncio_example_create_connection-streams>`
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001634 using the high-level :func:`asyncio.open_connection` function
1635 and streams.
Victor Stinner04e6df32014-10-11 16:16:27 +02001636
1637
Yury Selivanov394374e2018-09-17 15:35:24 -04001638.. _asyncio_example_unix_signals:
1639
Victor Stinner04e6df32014-10-11 16:16:27 +02001640Set signal handlers for SIGINT and SIGTERM
Victor Stinnera092a612015-01-09 15:58:41 +01001641^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinner04e6df32014-10-11 16:16:27 +02001642
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001643(This ``signals`` example only works on Unix.)
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001644
1645Register handlers for signals :py:data:`SIGINT` and :py:data:`SIGTERM`
1646using the :meth:`loop.add_signal_handler` method::
Victor Stinner8b863482014-01-27 10:07:50 +01001647
1648 import asyncio
1649 import functools
1650 import os
1651 import signal
1652
Alexander Vasinceb842e2019-05-03 18:25:36 +03001653 def ask_exit(signame, loop):
Victor Stinner8b863482014-01-27 10:07:50 +01001654 print("got signal %s: exit" % signame)
1655 loop.stop()
1656
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001657 async def main():
1658 loop = asyncio.get_running_loop()
Victor Stinner8b863482014-01-27 10:07:50 +01001659
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001660 for signame in {'SIGINT', 'SIGTERM'}:
1661 loop.add_signal_handler(
1662 getattr(signal, signame),
Alexander Vasinceb842e2019-05-03 18:25:36 +03001663 functools.partial(ask_exit, signame, loop))
Victor Stinner2cef3002014-10-23 22:38:46 +02001664
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001665 await asyncio.sleep(3600)
1666
1667 print("Event loop running for 1 hour, press Ctrl+C to interrupt.")
1668 print(f"pid {os.getpid()}: send SIGINT or SIGTERM to exit.")
1669
1670 asyncio.run(main())