blob: 25a3692695d538e3685ea5e42ae1edb83d08f33f [file] [log] [blame]
R David Murray6a143812013-12-20 14:37:39 -05001.. currentmodule:: asyncio
Victor Stinnerea3183f2013-12-03 01:08:00 +01002
Yury Selivanov7c7605f2018-09-11 09:54:40 -07003
4==========
5Event Loop
6==========
7
Kyle Stanleyf9000642019-10-10 19:18:46 -04008**Source code:** :source:`Lib/asyncio/events.py`,
9:source:`Lib/asyncio/base_events.py`
10
11------------------------------------
Yury Selivanov7c7605f2018-09-11 09:54:40 -070012
13.. rubric:: Preface
14
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -040015The event loop is the core of every asyncio application.
Yury Selivanov7c7605f2018-09-11 09:54:40 -070016Event loops run asynchronous tasks and callbacks, perform network
Carol Willing5b7cbd62018-09-12 17:05:17 -070017IO operations, and run subprocesses.
Yury Selivanov7c7605f2018-09-11 09:54:40 -070018
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -040019Application developers should typically use the high-level asyncio functions,
20such as :func:`asyncio.run`, and should rarely need to reference the loop
21object or call its methods. This section is intended mostly for authors
22of lower-level code, libraries, and frameworks, who need finer control over
23the event loop behavior.
Yury Selivanov7c7605f2018-09-11 09:54:40 -070024
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -040025.. rubric:: Obtaining the Event Loop
Yury Selivanov7c7605f2018-09-11 09:54:40 -070026
27The following low-level functions can be used to get, set, or create
28an event loop:
29
30.. function:: get_running_loop()
31
32 Return the running event loop in the current OS thread.
33
34 If there is no running event loop a :exc:`RuntimeError` is raised.
35 This function can only be called from a coroutine or a callback.
36
37 .. versionadded:: 3.7
38
39.. function:: get_event_loop()
40
Andrew Svetlov2c49bec2020-01-21 00:46:38 +020041 Get the current event loop.
42
43 If there is no current event loop set in the current OS thread,
44 the OS thread is main, and :func:`set_event_loop` has not yet
Yury Selivanov7c7605f2018-09-11 09:54:40 -070045 been called, asyncio will create a new event loop and set it as the
46 current one.
47
Carol Willing5b7cbd62018-09-12 17:05:17 -070048 Because this function has rather complex behavior (especially
49 when custom event loop policies are in use), using the
50 :func:`get_running_loop` function is preferred to :func:`get_event_loop`
51 in coroutines and callbacks.
Yury Selivanov7c7605f2018-09-11 09:54:40 -070052
Carol Willing5b7cbd62018-09-12 17:05:17 -070053 Consider also using the :func:`asyncio.run` function instead of using
54 lower level functions to manually create and close an event loop.
Yury Selivanov7c7605f2018-09-11 09:54:40 -070055
56.. function:: set_event_loop(loop)
57
58 Set *loop* as a current event loop for the current OS thread.
59
60.. function:: new_event_loop()
61
62 Create a new event loop object.
63
64Note that the behaviour of :func:`get_event_loop`, :func:`set_event_loop`,
65and :func:`new_event_loop` functions can be altered by
66:ref:`setting a custom event loop policy <asyncio-policies>`.
67
68
69.. rubric:: Contents
70
71This documentation page contains the following sections:
72
Carol Willing5b7cbd62018-09-12 17:05:17 -070073* The `Event Loop Methods`_ section is the reference documentation of
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -040074 the event loop APIs;
Yury Selivanov7c7605f2018-09-11 09:54:40 -070075
76* The `Callback Handles`_ section documents the :class:`Handle` and
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -040077 :class:`TimerHandle` instances which are returned from scheduling
78 methods such as :meth:`loop.call_soon` and :meth:`loop.call_later`;
Yury Selivanov7c7605f2018-09-11 09:54:40 -070079
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -040080* The `Server Objects`_ section documents types returned from
Yury Selivanov7c7605f2018-09-11 09:54:40 -070081 event loop methods like :meth:`loop.create_server`;
82
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -040083* The `Event Loop Implementations`_ section documents the
Yury Selivanov7c7605f2018-09-11 09:54:40 -070084 :class:`SelectorEventLoop` and :class:`ProactorEventLoop` classes;
85
86* The `Examples`_ section showcases how to work with some event
87 loop APIs.
88
89
Victor Stinner9592edb2014-02-02 15:03:02 +010090.. _asyncio-event-loop:
Victor Stinnerea3183f2013-12-03 01:08:00 +010091
Yury Selivanov7c7605f2018-09-11 09:54:40 -070092Event Loop Methods
93==================
Victor Stinnerea3183f2013-12-03 01:08:00 +010094
Carol Willing5b7cbd62018-09-12 17:05:17 -070095Event loops have **low-level** APIs for the following:
lf627d2c82017-07-25 17:03:51 -060096
Yury Selivanov7c7605f2018-09-11 09:54:40 -070097.. contents::
98 :depth: 1
99 :local:
Victor Stinnerea3183f2013-12-03 01:08:00 +0100100
Victor Stinnerea3183f2013-12-03 01:08:00 +0100101
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700102Running and stopping the loop
103^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +0100104
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700105.. method:: loop.run_until_complete(future)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100106
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400107 Run until the *future* (an instance of :class:`Future`) has
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700108 completed.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100109
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700110 If the argument is a :ref:`coroutine object <coroutine>` it
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400111 is implicitly scheduled to run as a :class:`asyncio.Task`.
Eli Bendersky136fea22014-02-09 06:55:58 -0800112
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700113 Return the Future's result or raise its exception.
Guido van Rossumf68afd82016-08-08 09:41:21 -0700114
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700115.. method:: loop.run_forever()
Guido van Rossumf68afd82016-08-08 09:41:21 -0700116
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700117 Run the event loop until :meth:`stop` is called.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100118
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700119 If :meth:`stop` is called before :meth:`run_forever()` is called,
120 the loop will poll the I/O selector once with a timeout of zero,
121 run all callbacks scheduled in response to I/O events (and
122 those that were already scheduled), and then exit.
Victor Stinner83704962015-02-25 14:24:15 +0100123
Guido van Rossum41f69f42015-11-19 13:28:47 -0800124 If :meth:`stop` is called while :meth:`run_forever` is running,
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700125 the loop will run the current batch of callbacks and then exit.
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400126 Note that new callbacks scheduled by callbacks will not run in this
Carol Willing5b7cbd62018-09-12 17:05:17 -0700127 case; instead, they will run the next time :meth:`run_forever` or
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700128 :meth:`run_until_complete` is called.
Guido van Rossum41f69f42015-11-19 13:28:47 -0800129
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700130.. method:: loop.stop()
Victor Stinnerea3183f2013-12-03 01:08:00 +0100131
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700132 Stop the event loop.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100133
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700134.. method:: loop.is_running()
Victor Stinnerea3183f2013-12-03 01:08:00 +0100135
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700136 Return ``True`` if the event loop is currently running.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100137
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700138.. method:: loop.is_closed()
Victor Stinnerea3183f2013-12-03 01:08:00 +0100139
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700140 Return ``True`` if the event loop was closed.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100141
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700142.. method:: loop.close()
Victor Stinnerea3183f2013-12-03 01:08:00 +0100143
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700144 Close the event loop.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100145
Andriy Maletskyb83d9172018-10-29 23:39:21 +0200146 The loop must not be running when this function is called.
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700147 Any pending callbacks will be discarded.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100148
Łukasz Langa7f9a2ae2019-06-04 13:03:20 +0200149 This method clears all queues and shuts down the executor, but does
150 not wait for the executor to finish.
Guido van Rossum41f69f42015-11-19 13:28:47 -0800151
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700152 This method is idempotent and irreversible. No other methods
153 should be called after the event loop is closed.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100154
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700155.. coroutinemethod:: loop.shutdown_asyncgens()
Yury Selivanov03660042016-12-15 17:36:05 -0500156
157 Schedule all currently open :term:`asynchronous generator` objects to
158 close with an :meth:`~agen.aclose()` call. After calling this method,
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700159 the event loop will issue a warning if a new asynchronous generator
Carol Willing5b7cbd62018-09-12 17:05:17 -0700160 is iterated. This should be used to reliably finalize all scheduled
Yury Selivanovac94e382018-09-17 23:58:00 -0400161 asynchronous generators.
Carol Willing5b7cbd62018-09-12 17:05:17 -0700162
Yury Selivanovac94e382018-09-17 23:58:00 -0400163 Note that there is no need to call this function when
164 :func:`asyncio.run` is used.
165
166 Example::
Yury Selivanov03660042016-12-15 17:36:05 -0500167
168 try:
169 loop.run_forever()
170 finally:
171 loop.run_until_complete(loop.shutdown_asyncgens())
172 loop.close()
173
174 .. versionadded:: 3.6
175
Kyle Stanley9fdc64c2019-09-19 08:47:22 -0400176.. coroutinemethod:: loop.shutdown_default_executor()
177
178 Schedule the closure of the default executor and wait for it to join all of
179 the threads in the :class:`ThreadPoolExecutor`. After calling this method, a
180 :exc:`RuntimeError` will be raised if :meth:`loop.run_in_executor` is called
181 while using the default executor.
182
183 Note that there is no need to call this function when
184 :func:`asyncio.run` is used.
185
186 .. versionadded:: 3.9
187
Yury Selivanov03660042016-12-15 17:36:05 -0500188
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700189Scheduling callbacks
190^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +0100191
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700192.. method:: loop.call_soon(callback, *args, context=None)
Victor Stinner8464c242014-11-28 13:15:41 +0100193
Carol Willing5b7cbd62018-09-12 17:05:17 -0700194 Schedule a *callback* to be called with *args* arguments at
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700195 the next iteration of the event loop.
Victor Stinner8464c242014-11-28 13:15:41 +0100196
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700197 Callbacks are called in the order in which they are registered.
198 Each callback will be called exactly once.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100199
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700200 An optional keyword-only *context* argument allows specifying a
201 custom :class:`contextvars.Context` for the *callback* to run in.
202 The current context is used when no *context* is provided.
Yury Selivanov28b91782018-05-23 13:35:04 -0400203
Yury Selivanov1096f762015-06-25 13:49:52 -0400204 An instance of :class:`asyncio.Handle` is returned, which can be
Carol Willing5b7cbd62018-09-12 17:05:17 -0700205 used later to cancel the callback.
206
207 This method is not thread-safe.
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500208
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700209.. method:: loop.call_soon_threadsafe(callback, *args, context=None)
Victor Stinner8464c242014-11-28 13:15:41 +0100210
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700211 A thread-safe variant of :meth:`call_soon`. Must be used to
212 schedule callbacks *from another thread*.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100213
Victor Stinner83704962015-02-25 14:24:15 +0100214 See the :ref:`concurrency and multithreading <asyncio-multithreading>`
215 section of the documentation.
216
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700217.. versionchanged:: 3.7
218 The *context* keyword-only parameter was added. See :pep:`567`
219 for more details.
220
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400221.. _asyncio-pass-keywords:
222
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700223.. note::
224
Carol Willing5b7cbd62018-09-12 17:05:17 -0700225 Most :mod:`asyncio` scheduling functions don't allow passing
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400226 keyword arguments. To do that, use :func:`functools.partial`::
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700227
Carol Willing5b7cbd62018-09-12 17:05:17 -0700228 # will schedule "print("Hello", flush=True)"
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700229 loop.call_soon(
230 functools.partial(print, "Hello", flush=True))
231
232 Using partial objects is usually more convenient than using lambdas,
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400233 as asyncio can render partial objects better in debug and error
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700234 messages.
Yury Selivanov28b91782018-05-23 13:35:04 -0400235
Victor Stinnerea3183f2013-12-03 01:08:00 +0100236
Victor Stinner45b27ed2014-02-01 02:36:43 +0100237.. _asyncio-delayed-calls:
238
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700239Scheduling delayed callbacks
240^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +0100241
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700242Event loop provides mechanisms to schedule callback functions
243to be called at some point in the future. Event loop uses monotonic
244clocks to track time.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100245
Victor Stinner45b27ed2014-02-01 02:36:43 +0100246
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700247.. method:: loop.call_later(delay, callback, *args, context=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100248
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700249 Schedule *callback* to be called after the given *delay*
250 number of seconds (can be either an int or a float).
Victor Stinnerea3183f2013-12-03 01:08:00 +0100251
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700252 An instance of :class:`asyncio.TimerHandle` is returned which can
253 be used to cancel the callback.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100254
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700255 *callback* will be called exactly once. If two callbacks are
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400256 scheduled for exactly the same time, the order in which they
257 are called is undefined.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100258
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700259 The optional positional *args* will be passed to the callback when
260 it is called. If you want the callback to be called with keyword
261 arguments use :func:`functools.partial`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100262
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700263 An optional keyword-only *context* argument allows specifying a
264 custom :class:`contextvars.Context` for the *callback* to run in.
265 The current context is used when no *context* is provided.
Victor Stinner8464c242014-11-28 13:15:41 +0100266
Yury Selivanov28b91782018-05-23 13:35:04 -0400267 .. versionchanged:: 3.7
268 The *context* keyword-only parameter was added. See :pep:`567`
269 for more details.
270
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400271 .. versionchanged:: 3.8
272 In Python 3.7 and earlier with the default event loop implementation,
273 the *delay* could not exceed one day.
274 This has been fixed in Python 3.8.
275
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700276.. method:: loop.call_at(when, callback, *args, context=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100277
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700278 Schedule *callback* to be called at the given absolute timestamp
279 *when* (an int or a float), using the same time reference as
280 :meth:`loop.time`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100281
282 This method's behavior is the same as :meth:`call_later`.
283
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700284 An instance of :class:`asyncio.TimerHandle` is returned which can
285 be used to cancel the callback.
Victor Stinner8464c242014-11-28 13:15:41 +0100286
Yury Selivanov28b91782018-05-23 13:35:04 -0400287 .. versionchanged:: 3.7
288 The *context* keyword-only parameter was added. See :pep:`567`
289 for more details.
290
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400291 .. versionchanged:: 3.8
292 In Python 3.7 and earlier with the default event loop implementation,
293 the difference between *when* and the current time could not exceed
294 one day. This has been fixed in Python 3.8.
295
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700296.. method:: loop.time()
Victor Stinnerea3183f2013-12-03 01:08:00 +0100297
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700298 Return the current time, as a :class:`float` value, according to
299 the event loop's internal monotonic clock.
300
301.. note::
Enrico Alarico Carbognani7e954e72019-04-18 14:43:14 +0200302 .. versionchanged:: 3.8
303 In Python 3.7 and earlier timeouts (relative *delay* or absolute *when*)
304 should not exceed one day. This has been fixed in Python 3.8.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100305
Victor Stinner3e09e322013-12-03 01:22:06 +0100306.. seealso::
307
308 The :func:`asyncio.sleep` function.
309
Victor Stinnerea3183f2013-12-03 01:08:00 +0100310
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700311Creating Futures and Tasks
312^^^^^^^^^^^^^^^^^^^^^^^^^^
Yury Selivanov950204d2016-05-16 16:23:00 -0400313
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700314.. method:: loop.create_future()
Yury Selivanov950204d2016-05-16 16:23:00 -0400315
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700316 Create an :class:`asyncio.Future` object attached to the event loop.
Yury Selivanov950204d2016-05-16 16:23:00 -0400317
Carol Willing5b7cbd62018-09-12 17:05:17 -0700318 This is the preferred way to create Futures in asyncio. This lets
319 third-party event loops provide alternative implementations of
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700320 the Future object (with better performance or instrumentation).
Yury Selivanov950204d2016-05-16 16:23:00 -0400321
322 .. versionadded:: 3.5.2
323
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700324.. method:: loop.create_task(coro, \*, name=None)
Yury Selivanov950204d2016-05-16 16:23:00 -0400325
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700326 Schedule the execution of a :ref:`coroutine`.
327 Return a :class:`Task` object.
Victor Stinner530ef2f2014-07-08 12:39:10 +0200328
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700329 Third-party event loops can use their own subclass of :class:`Task`
330 for interoperability. In this case, the result type is a subclass
331 of :class:`Task`.
Victor Stinner530ef2f2014-07-08 12:39:10 +0200332
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700333 If the *name* argument is provided and not ``None``, it is set as
334 the name of the task using :meth:`Task.set_name`.
Victor Stinner530ef2f2014-07-08 12:39:10 +0200335
Alex Grönholmcca4eec2018-08-09 00:06:47 +0300336 .. versionchanged:: 3.8
337 Added the ``name`` parameter.
338
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700339.. method:: loop.set_task_factory(factory)
Yury Selivanov71854612015-05-11 16:28:27 -0400340
341 Set a task factory that will be used by
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700342 :meth:`loop.create_task`.
Yury Selivanov71854612015-05-11 16:28:27 -0400343
344 If *factory* is ``None`` the default task factory will be set.
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400345 Otherwise, *factory* must be a *callable* with the signature matching
346 ``(loop, coro)``, where *loop* is a reference to the active
347 event loop, and *coro* is a coroutine object. The callable
348 must return a :class:`asyncio.Future`-compatible object.
Yury Selivanov71854612015-05-11 16:28:27 -0400349
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700350.. method:: loop.get_task_factory()
Yury Selivanov71854612015-05-11 16:28:27 -0400351
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700352 Return a task factory or ``None`` if the default one is in use.
Yury Selivanov71854612015-05-11 16:28:27 -0400353
Victor Stinner530ef2f2014-07-08 12:39:10 +0200354
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700355Opening network connections
356^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +0100357
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700358.. coroutinemethod:: loop.create_connection(protocol_factory, \
359 host=None, port=None, \*, ssl=None, \
360 family=0, proto=0, flags=0, sock=None, \
361 local_addr=None, server_hostname=None, \
362 ssl_handshake_timeout=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100363
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700364 Open a streaming transport connection to a given
365 address specified by *host* and *port*.
366
367 The socket family can be either :py:data:`~socket.AF_INET` or
368 :py:data:`~socket.AF_INET6` depending on *host* (or the *family*
369 argument, if provided).
370
371 The socket type will be :py:data:`~socket.SOCK_STREAM`.
372
373 *protocol_factory* must be a callable returning an
374 :ref:`asyncio protocol <asyncio-protocol>` implementation.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100375
Yury Selivanov19a44f62017-12-14 20:53:26 -0500376 This method will try to establish the connection in the background.
377 When successful, it returns a ``(transport, protocol)`` pair.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100378
379 The chronological synopsis of the underlying operation is as follows:
380
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700381 #. The connection is established and a :ref:`transport <asyncio-transport>`
382 is created for it.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100383
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700384 #. *protocol_factory* is called without arguments and is expected to
385 return a :ref:`protocol <asyncio-protocol>` instance.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100386
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700387 #. The protocol instance is coupled with the transport by calling its
388 :meth:`~BaseProtocol.connection_made` method.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100389
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700390 #. A ``(transport, protocol)`` tuple is returned on success.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100391
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700392 The created transport is an implementation-dependent bidirectional
393 stream.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100394
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700395 Other arguments:
Victor Stinnerea3183f2013-12-03 01:08:00 +0100396
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400397 * *ssl*: if given and not false, a SSL/TLS transport is created
Victor Stinnerea3183f2013-12-03 01:08:00 +0100398 (by default a plain TCP transport is created). If *ssl* is
399 a :class:`ssl.SSLContext` object, this context is used to create
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400400 the transport; if *ssl* is :const:`True`, a default context returned
401 from :func:`ssl.create_default_context` is used.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100402
Berker Peksag9c1dba22014-09-28 00:00:58 +0300403 .. seealso:: :ref:`SSL/TLS security considerations <ssl-security>`
Antoine Pitrouc5e075f2014-03-22 18:19:11 +0100404
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400405 * *server_hostname* sets or overrides the hostname that the target
406 server's certificate will be matched against. Should only be passed
407 if *ssl* is not ``None``. By default the value of the *host* argument
Victor Stinnerea3183f2013-12-03 01:08:00 +0100408 is used. If *host* is empty, there is no default and you must pass a
409 value for *server_hostname*. If *server_hostname* is an empty
410 string, hostname matching is disabled (which is a serious security
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400411 risk, allowing for potential man-in-the-middle attacks).
Victor Stinnerea3183f2013-12-03 01:08:00 +0100412
413 * *family*, *proto*, *flags* are the optional address family, protocol
414 and flags to be passed through to getaddrinfo() for *host* resolution.
415 If given, these should all be integers from the corresponding
416 :mod:`socket` module constants.
417
twisteroid ambassador88f07a82019-05-05 19:14:35 +0800418 * *happy_eyeballs_delay*, if given, enables Happy Eyeballs for this
419 connection. It should
420 be a floating-point number representing the amount of time in seconds
421 to wait for a connection attempt to complete, before starting the next
422 attempt in parallel. This is the "Connection Attempt Delay" as defined
423 in :rfc:`8305`. A sensible default value recommended by the RFC is ``0.25``
424 (250 milliseconds).
425
426 * *interleave* controls address reordering when a host name resolves to
427 multiple IP addresses.
428 If ``0`` or unspecified, no reordering is done, and addresses are
429 tried in the order returned by :meth:`getaddrinfo`. If a positive integer
430 is specified, the addresses are interleaved by address family, and the
431 given integer is interpreted as "First Address Family Count" as defined
432 in :rfc:`8305`. The default is ``0`` if *happy_eyeballs_delay* is not
433 specified, and ``1`` if it is.
434
Victor Stinnerea3183f2013-12-03 01:08:00 +0100435 * *sock*, if given, should be an existing, already connected
436 :class:`socket.socket` object to be used by the transport.
twisteroid ambassador88f07a82019-05-05 19:14:35 +0800437 If *sock* is given, none of *host*, *port*, *family*, *proto*, *flags*,
438 *happy_eyeballs_delay*, *interleave*
Victor Stinnerea3183f2013-12-03 01:08:00 +0100439 and *local_addr* should be specified.
440
441 * *local_addr*, if given, is a ``(local_host, local_port)`` tuple used
442 to bind the socket to locally. The *local_host* and *local_port*
Carol Willing5b7cbd62018-09-12 17:05:17 -0700443 are looked up using ``getaddrinfo()``, similarly to *host* and *port*.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100444
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400445 * *ssl_handshake_timeout* is (for a TLS connection) the time in seconds
446 to wait for the TLS handshake to complete before aborting the connection.
Yury Selivanov96026432018-06-04 11:32:35 -0400447 ``60.0`` seconds if ``None`` (default).
Neil Aspinallf7686c12017-12-19 19:45:42 +0000448
twisteroid ambassador88f07a82019-05-05 19:14:35 +0800449 .. versionadded:: 3.8
450
451 The *happy_eyeballs_delay* and *interleave* parameters.
452
Neil Aspinallf7686c12017-12-19 19:45:42 +0000453 .. versionadded:: 3.7
454
455 The *ssl_handshake_timeout* parameter.
456
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700457 .. versionchanged:: 3.6
458
459 The socket option :py:data:`~socket.TCP_NODELAY` is set by default
460 for all TCP connections.
461
Victor Stinner60208a12015-09-15 22:41:52 +0200462 .. versionchanged:: 3.5
463
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400464 Added support for SSL/TLS in :class:`ProactorEventLoop`.
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200465
Victor Stinnerc8ea8132014-01-23 11:02:09 +0100466 .. seealso::
467
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700468 The :func:`open_connection` function is a high-level alternative
469 API. It returns a pair of (:class:`StreamReader`, :class:`StreamWriter`)
470 that can be used directly in async/await code.
Victor Stinnerc8ea8132014-01-23 11:02:09 +0100471
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700472.. coroutinemethod:: loop.create_datagram_endpoint(protocol_factory, \
473 local_addr=None, remote_addr=None, \*, \
474 family=0, proto=0, flags=0, \
475 reuse_address=None, reuse_port=None, \
476 allow_broadcast=None, sock=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100477
Kyle Stanleyab513a32019-12-09 09:21:10 -0500478 .. note::
479 The parameter *reuse_address* is no longer supported, as using
480 :py:data:`~sockets.SO_REUSEADDR` poses a significant security concern for
481 UDP. Explicitly passing ``reuse_address=True`` will raise an exception.
482
483 When multiple processes with differing UIDs assign sockets to an
Jesús Ceab0d49492019-12-20 03:21:03 +0100484 identical UDP socket address with ``SO_REUSEADDR``, incoming packets can
Kyle Stanleyab513a32019-12-09 09:21:10 -0500485 become randomly distributed among the sockets.
486
487 For supported platforms, *reuse_port* can be used as a replacement for
488 similar functionality. With *reuse_port*,
489 :py:data:`~sockets.SO_REUSEPORT` is used instead, which specifically
490 prevents processes with differing UIDs from assigning sockets to the same
491 socket address.
492
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700493 Create a datagram connection.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100494
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700495 The socket family can be either :py:data:`~socket.AF_INET`,
496 :py:data:`~socket.AF_INET6`, or :py:data:`~socket.AF_UNIX`,
497 depending on *host* (or the *family* argument, if provided).
Victor Stinnera6919aa2014-02-19 13:32:34 +0100498
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700499 The socket type will be :py:data:`~socket.SOCK_DGRAM`.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100500
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700501 *protocol_factory* must be a callable returning a
502 :ref:`protocol <asyncio-protocol>` implementation.
503
504 A tuple of ``(transport, protocol)`` is returned on success.
505
506 Other arguments:
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700507
508 * *local_addr*, if given, is a ``(local_host, local_port)`` tuple used
509 to bind the socket to locally. The *local_host* and *local_port*
510 are looked up using :meth:`getaddrinfo`.
511
512 * *remote_addr*, if given, is a ``(remote_host, remote_port)`` tuple used
513 to connect the socket to a remote address. The *remote_host* and
514 *remote_port* are looked up using :meth:`getaddrinfo`.
515
516 * *family*, *proto*, *flags* are the optional address family, protocol
517 and flags to be passed through to :meth:`getaddrinfo` for *host*
518 resolution. If given, these should all be integers from the
519 corresponding :mod:`socket` module constants.
520
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700521 * *reuse_port* tells the kernel to allow this endpoint to be bound to the
522 same port as other existing endpoints are bound to, so long as they all
523 set this flag when being created. This option is not supported on Windows
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400524 and some Unixes. If the :py:data:`~socket.SO_REUSEPORT` constant is not
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700525 defined then this capability is unsupported.
526
527 * *allow_broadcast* tells the kernel to allow this endpoint to send
528 messages to the broadcast address.
529
530 * *sock* can optionally be specified in order to use a preexisting,
531 already connected, :class:`socket.socket` object to be used by the
532 transport. If specified, *local_addr* and *remote_addr* should be omitted
533 (must be :const:`None`).
Victor Stinnera6919aa2014-02-19 13:32:34 +0100534
Victor Stinnerc7edffd2014-10-12 11:24:26 +0200535 See :ref:`UDP echo client protocol <asyncio-udp-echo-client-protocol>` and
536 :ref:`UDP echo server protocol <asyncio-udp-echo-server-protocol>` examples.
537
Romuald Brunet0ded5802018-05-14 18:22:00 +0200538 .. versionchanged:: 3.4.4
539 The *family*, *proto*, *flags*, *reuse_address*, *reuse_port,
540 *allow_broadcast*, and *sock* parameters were added.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100541
Kyle Stanleyab513a32019-12-09 09:21:10 -0500542 .. versionchanged:: 3.8.1
543 The *reuse_address* parameter is no longer supported due to security
544 concerns.
545
Andrew Svetlovbafd4b52019-05-28 12:52:15 +0300546 .. versionchanged:: 3.8
547 Added support for Windows.
548
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700549.. coroutinemethod:: loop.create_unix_connection(protocol_factory, \
550 path=None, \*, ssl=None, sock=None, \
551 server_hostname=None, ssl_handshake_timeout=None)
Victor Stinnera6919aa2014-02-19 13:32:34 +0100552
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400553 Create a Unix connection.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100554
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700555 The socket family will be :py:data:`~socket.AF_UNIX`; socket
556 type will be :py:data:`~socket.SOCK_STREAM`.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100557
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700558 A tuple of ``(transport, protocol)`` is returned on success.
Guido van Rossum9e80eeb2016-11-03 14:17:25 -0700559
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400560 *path* is the name of a Unix domain socket and is required,
561 unless a *sock* parameter is specified. Abstract Unix sockets,
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700562 :class:`str`, :class:`bytes`, and :class:`~pathlib.Path` paths are
563 supported.
564
565 See the documentation of the :meth:`loop.create_connection` method
566 for information about arguments to this method.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100567
Cheryl Sabella2d6097d2018-10-12 10:55:20 -0400568 .. availability:: Unix.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100569
Neil Aspinallf7686c12017-12-19 19:45:42 +0000570 .. versionadded:: 3.7
571
572 The *ssl_handshake_timeout* parameter.
573
Yury Selivanov423fd362017-11-20 17:26:28 -0500574 .. versionchanged:: 3.7
575
Elvis Pranskevichusc0d062f2018-06-08 11:36:00 -0400576 The *path* parameter can now be a :term:`path-like object`.
Yury Selivanov423fd362017-11-20 17:26:28 -0500577
Victor Stinnera6919aa2014-02-19 13:32:34 +0100578
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700579Creating network servers
580^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +0100581
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700582.. coroutinemethod:: loop.create_server(protocol_factory, \
583 host=None, port=None, \*, \
584 family=socket.AF_UNSPEC, \
585 flags=socket.AI_PASSIVE, \
586 sock=None, backlog=100, ssl=None, \
587 reuse_address=None, reuse_port=None, \
588 ssl_handshake_timeout=None, start_serving=True)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100589
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700590 Create a TCP server (socket type :data:`~socket.SOCK_STREAM`) listening
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400591 on *port* of the *host* address.
Victor Stinner33f6abe2014-10-12 20:36:04 +0200592
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700593 Returns a :class:`Server` object.
Victor Stinner33f6abe2014-10-12 20:36:04 +0200594
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700595 Arguments:
Victor Stinner33f6abe2014-10-12 20:36:04 +0200596
Bumsik Kim5cc583d2018-09-16 19:40:44 -0400597 * *protocol_factory* must be a callable returning a
598 :ref:`protocol <asyncio-protocol>` implementation.
599
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400600 * The *host* parameter can be set to several types which determine where
601 the server would be listening:
602
603 - If *host* is a string, the TCP server is bound to a single network
604 interface specified by *host*.
605
606 - If *host* is a sequence of strings, the TCP server is bound to all
607 network interfaces specified by the sequence.
608
609 - If *host* is an empty string or ``None``, all interfaces are
610 assumed and a list of multiple sockets will be returned (most likely
611 one for IPv4 and another one for IPv6).
Victor Stinner33f6abe2014-10-12 20:36:04 +0200612
613 * *family* can be set to either :data:`socket.AF_INET` or
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700614 :data:`~socket.AF_INET6` to force the socket to use IPv4 or IPv6.
Carol Willing5b7cbd62018-09-12 17:05:17 -0700615 If not set, the *family* will be determined from host name
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700616 (defaults to :data:`~socket.AF_UNSPEC`).
Victor Stinner33f6abe2014-10-12 20:36:04 +0200617
618 * *flags* is a bitmask for :meth:`getaddrinfo`.
619
620 * *sock* can optionally be specified in order to use a preexisting
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400621 socket object. If specified, *host* and *port* must not be specified.
Victor Stinner33f6abe2014-10-12 20:36:04 +0200622
623 * *backlog* is the maximum number of queued connections passed to
624 :meth:`~socket.socket.listen` (defaults to 100).
625
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400626 * *ssl* can be set to an :class:`~ssl.SSLContext` instance to enable
627 TLS over the accepted connections.
Victor Stinner33f6abe2014-10-12 20:36:04 +0200628
629 * *reuse_address* tells the kernel to reuse a local socket in
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700630 ``TIME_WAIT`` state, without waiting for its natural timeout to
Serhiy Storchaka4adf01c2016-10-19 18:30:05 +0300631 expire. If not specified will automatically be set to ``True`` on
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400632 Unix.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100633
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700634 * *reuse_port* tells the kernel to allow this endpoint to be bound to the
635 same port as other existing endpoints are bound to, so long as they all
636 set this flag when being created. This option is not supported on
637 Windows.
638
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400639 * *ssl_handshake_timeout* is (for a TLS server) the time in seconds to wait
640 for the TLS handshake to complete before aborting the connection.
Yury Selivanov96026432018-06-04 11:32:35 -0400641 ``60.0`` seconds if ``None`` (default).
Neil Aspinallf7686c12017-12-19 19:45:42 +0000642
Yury Selivanovc9070d02018-01-25 18:08:09 -0500643 * *start_serving* set to ``True`` (the default) causes the created server
644 to start accepting connections immediately. When set to ``False``,
645 the user should await on :meth:`Server.start_serving` or
646 :meth:`Server.serve_forever` to make the server to start accepting
647 connections.
648
Neil Aspinallf7686c12017-12-19 19:45:42 +0000649 .. versionadded:: 3.7
650
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700651 Added *ssl_handshake_timeout* and *start_serving* parameters.
652
653 .. versionchanged:: 3.6
654
655 The socket option :py:data:`~socket.TCP_NODELAY` is set by default
656 for all TCP connections.
Neil Aspinallf7686c12017-12-19 19:45:42 +0000657
Victor Stinner60208a12015-09-15 22:41:52 +0200658 .. versionchanged:: 3.5
659
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400660 Added support for SSL/TLS in :class:`ProactorEventLoop`.
Victor Stinnerc8ea8132014-01-23 11:02:09 +0100661
Victor Stinner7b58a2b2015-09-21 18:41:05 +0200662 .. versionchanged:: 3.5.1
Victor Stinner5e4a7d82015-09-21 18:33:43 +0200663
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700664 The *host* parameter can be a sequence of strings.
665
666 .. seealso::
667
668 The :func:`start_server` function is a higher-level alternative API
669 that returns a pair of :class:`StreamReader` and :class:`StreamWriter`
670 that can be used in an async/await code.
Victor Stinner5e4a7d82015-09-21 18:33:43 +0200671
Victor Stinnerea3183f2013-12-03 01:08:00 +0100672
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700673.. coroutinemethod:: loop.create_unix_server(protocol_factory, path=None, \
674 \*, sock=None, backlog=100, ssl=None, \
675 ssl_handshake_timeout=None, start_serving=True)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100676
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700677 Similar to :meth:`loop.create_server` but works with the
678 :py:data:`~socket.AF_UNIX` socket family.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100679
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400680 *path* is the name of a Unix domain socket, and is required,
681 unless a *sock* argument is provided. Abstract Unix sockets,
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700682 :class:`str`, :class:`bytes`, and :class:`~pathlib.Path` paths
683 are supported.
Yury Selivanov423fd362017-11-20 17:26:28 -0500684
Bumsik Kim5cc583d2018-09-16 19:40:44 -0400685 See the documentation of the :meth:`loop.create_server` method
686 for information about arguments to this method.
687
Cheryl Sabella2d6097d2018-10-12 10:55:20 -0400688 .. availability:: Unix.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100689
Neil Aspinallf7686c12017-12-19 19:45:42 +0000690 .. versionadded:: 3.7
691
Elvis Pranskevichusc0d062f2018-06-08 11:36:00 -0400692 The *ssl_handshake_timeout* and *start_serving* parameters.
Neil Aspinallf7686c12017-12-19 19:45:42 +0000693
Yury Selivanov423fd362017-11-20 17:26:28 -0500694 .. versionchanged:: 3.7
695
696 The *path* parameter can now be a :class:`~pathlib.Path` object.
697
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700698.. coroutinemethod:: loop.connect_accepted_socket(protocol_factory, \
699 sock, \*, ssl=None, ssl_handshake_timeout=None)
Yury Selivanov3b3a1412016-11-07 15:35:25 -0500700
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700701 Wrap an already accepted connection into a transport/protocol pair.
Yury Selivanov3b3a1412016-11-07 15:35:25 -0500702
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700703 This method can be used by servers that accept connections outside
704 of asyncio but that use asyncio to handle them.
Yury Selivanov3b3a1412016-11-07 15:35:25 -0500705
706 Parameters:
707
Bumsik Kim5cc583d2018-09-16 19:40:44 -0400708 * *protocol_factory* must be a callable returning a
709 :ref:`protocol <asyncio-protocol>` implementation.
710
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700711 * *sock* is a preexisting socket object returned from
712 :meth:`socket.accept <socket.socket.accept>`.
Yury Selivanov3b3a1412016-11-07 15:35:25 -0500713
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700714 * *ssl* can be set to an :class:`~ssl.SSLContext` to enable SSL over
715 the accepted connections.
Yury Selivanov3b3a1412016-11-07 15:35:25 -0500716
Neil Aspinallf7686c12017-12-19 19:45:42 +0000717 * *ssl_handshake_timeout* is (for an SSL connection) the time in seconds to
718 wait for the SSL handshake to complete before aborting the connection.
Yury Selivanov96026432018-06-04 11:32:35 -0400719 ``60.0`` seconds if ``None`` (default).
Neil Aspinallf7686c12017-12-19 19:45:42 +0000720
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700721 Returns a ``(transport, protocol)`` pair.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100722
Neil Aspinallf7686c12017-12-19 19:45:42 +0000723 .. versionadded:: 3.7
724
725 The *ssl_handshake_timeout* parameter.
726
AraHaan431665b2017-11-21 11:06:26 -0500727 .. versionadded:: 3.5.3
728
729
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700730Transferring files
731^^^^^^^^^^^^^^^^^^
Andrew Svetlov7c684072018-01-27 21:22:47 +0200732
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700733.. coroutinemethod:: loop.sendfile(transport, file, \
734 offset=0, count=None, *, fallback=True)
Andrew Svetlov7c684072018-01-27 21:22:47 +0200735
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700736 Send a *file* over a *transport*. Return the total number of bytes
737 sent.
Andrew Svetlov7c684072018-01-27 21:22:47 +0200738
739 The method uses high-performance :meth:`os.sendfile` if available.
740
741 *file* must be a regular file object opened in binary mode.
742
743 *offset* tells from where to start reading the file. If specified,
744 *count* is the total number of bytes to transmit as opposed to
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400745 sending the file until EOF is reached. File position is always updated,
746 even when this method raises an error, and
747 :meth:`file.tell() <io.IOBase.tell>` can be used to obtain the actual
748 number of bytes sent.
Andrew Svetlov7c684072018-01-27 21:22:47 +0200749
750 *fallback* set to ``True`` makes asyncio to manually read and send
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700751 the file when the platform does not support the sendfile system call
Andrew Svetlov7c684072018-01-27 21:22:47 +0200752 (e.g. Windows or SSL socket on Unix).
753
754 Raise :exc:`SendfileNotAvailableError` if the system does not support
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400755 the *sendfile* syscall and *fallback* is ``False``.
Andrew Svetlov7c684072018-01-27 21:22:47 +0200756
757 .. versionadded:: 3.7
758
759
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500760TLS Upgrade
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700761^^^^^^^^^^^
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500762
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700763.. coroutinemethod:: loop.start_tls(transport, protocol, \
764 sslcontext, \*, server_side=False, \
765 server_hostname=None, ssl_handshake_timeout=None)
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500766
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700767 Upgrade an existing transport-based connection to TLS.
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500768
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700769 Return a new transport instance, that the *protocol* must start using
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500770 immediately after the *await*. The *transport* instance passed to
771 the *start_tls* method should never be used again.
772
773 Parameters:
774
775 * *transport* and *protocol* instances that methods like
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700776 :meth:`~loop.create_server` and
777 :meth:`~loop.create_connection` return.
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500778
779 * *sslcontext*: a configured instance of :class:`~ssl.SSLContext`.
780
781 * *server_side* pass ``True`` when a server-side connection is being
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700782 upgraded (like the one created by :meth:`~loop.create_server`).
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500783
784 * *server_hostname*: sets or overrides the host name that the target
785 server's certificate will be matched against.
786
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400787 * *ssl_handshake_timeout* is (for a TLS connection) the time in seconds to
788 wait for the TLS handshake to complete before aborting the connection.
Yury Selivanov96026432018-06-04 11:32:35 -0400789 ``60.0`` seconds if ``None`` (default).
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500790
791 .. versionadded:: 3.7
792
793
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700794Watching file descriptors
795^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerc1567df2014-02-08 23:22:58 +0100796
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700797.. method:: loop.add_reader(fd, callback, \*args)
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200798
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400799 Start monitoring the *fd* file descriptor for read availability and
800 invoke *callback* with the specified arguments once *fd* is available for
801 reading.
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200802
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700803.. method:: loop.remove_reader(fd)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100804
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400805 Stop monitoring the *fd* file descriptor for read availability.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100806
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700807.. method:: loop.add_writer(fd, callback, \*args)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100808
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400809 Start monitoring the *fd* file descriptor for write availability and
810 invoke *callback* with the specified arguments once *fd* is available for
811 writing.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100812
Yury Selivanove247b462018-09-20 12:43:59 -0400813 Use :func:`functools.partial` :ref:`to pass keyword arguments
Naglis17473342018-12-04 09:31:15 +0200814 <asyncio-pass-keywords>` to *callback*.
Victor Stinner8464c242014-11-28 13:15:41 +0100815
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700816.. method:: loop.remove_writer(fd)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100817
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400818 Stop monitoring the *fd* file descriptor for write availability.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100819
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700820See also :ref:`Platform Support <asyncio-platform-support>` section
821for some limitations of these methods.
Victor Stinner04e6df32014-10-11 16:16:27 +0200822
Victor Stinnerc1567df2014-02-08 23:22:58 +0100823
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700824Working with socket objects directly
825^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerc1567df2014-02-08 23:22:58 +0100826
Carol Willing5b7cbd62018-09-12 17:05:17 -0700827In general, protocol implementations that use transport-based APIs
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700828such as :meth:`loop.create_connection` and :meth:`loop.create_server`
829are faster than implementations that work with sockets directly.
Carol Willing5b7cbd62018-09-12 17:05:17 -0700830However, there are some use cases when performance is not critical, and
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700831working with :class:`~socket.socket` objects directly is more
832convenient.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100833
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700834.. coroutinemethod:: loop.sock_recv(sock, nbytes)
Yury Selivanov55c50842016-06-08 12:48:15 -0400835
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400836 Receive up to *nbytes* from *sock*. Asynchronous version of
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700837 :meth:`socket.recv() <socket.socket.recv>`.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100838
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400839 Return the received data as a bytes object.
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700840
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400841 *sock* must be a non-blocking socket.
Victor Stinnerec2ce092014-07-29 23:12:22 +0200842
Yury Selivanov19a44f62017-12-14 20:53:26 -0500843 .. versionchanged:: 3.7
Carol Willing5b7cbd62018-09-12 17:05:17 -0700844 Even though this method was always documented as a coroutine
845 method, releases before Python 3.7 returned a :class:`Future`.
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700846 Since Python 3.7 this is an ``async def`` method.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100847
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700848.. coroutinemethod:: loop.sock_recv_into(sock, buf)
Antoine Pitrou525f40d2017-10-19 21:46:40 +0200849
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400850 Receive data from *sock* into the *buf* buffer. Modeled after the blocking
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700851 :meth:`socket.recv_into() <socket.socket.recv_into>` method.
Antoine Pitrou525f40d2017-10-19 21:46:40 +0200852
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700853 Return the number of bytes written to the buffer.
Antoine Pitrou525f40d2017-10-19 21:46:40 +0200854
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400855 *sock* must be a non-blocking socket.
Antoine Pitrou525f40d2017-10-19 21:46:40 +0200856
Antoine Pitrou525f40d2017-10-19 21:46:40 +0200857 .. versionadded:: 3.7
858
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700859.. coroutinemethod:: loop.sock_sendall(sock, data)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100860
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400861 Send *data* to the *sock* socket. Asynchronous version of
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700862 :meth:`socket.sendall() <socket.socket.sendall>`.
Yury Selivanov55c50842016-06-08 12:48:15 -0400863
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400864 This method continues to send to the socket until either all data
865 in *data* has been sent or an error occurs. ``None`` is returned
Carol Willing5b7cbd62018-09-12 17:05:17 -0700866 on success. On error, an exception is raised. Additionally, there is no way
867 to determine how much data, if any, was successfully processed by the
868 receiving end of the connection.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100869
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400870 *sock* must be a non-blocking socket.
Victor Stinnerec2ce092014-07-29 23:12:22 +0200871
Yury Selivanov19a44f62017-12-14 20:53:26 -0500872 .. versionchanged:: 3.7
873 Even though the method was always documented as a coroutine
874 method, before Python 3.7 it returned an :class:`Future`.
875 Since Python 3.7, this is an ``async def`` method.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100876
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700877.. coroutinemethod:: loop.sock_connect(sock, address)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100878
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400879 Connect *sock* to a remote socket at *address*.
Victor Stinner1b0580b2014-02-13 09:24:37 +0100880
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700881 Asynchronous version of :meth:`socket.connect() <socket.socket.connect>`.
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 Selivanov55c50842016-06-08 12:48:15 -0400885 .. versionchanged:: 3.5.2
886 ``address`` no longer needs to be resolved. ``sock_connect``
887 will try to check if the *address* is already resolved by calling
888 :func:`socket.inet_pton`. If not,
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700889 :meth:`loop.getaddrinfo` will be used to resolve the
Yury Selivanov55c50842016-06-08 12:48:15 -0400890 *address*.
891
Victor Stinnerc1567df2014-02-08 23:22:58 +0100892 .. seealso::
893
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700894 :meth:`loop.create_connection`
Yury Selivanov55c50842016-06-08 12:48:15 -0400895 and :func:`asyncio.open_connection() <open_connection>`.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100896
897
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700898.. coroutinemethod:: loop.sock_accept(sock)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100899
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700900 Accept a connection. Modeled after the blocking
901 :meth:`socket.accept() <socket.socket.accept>` method.
Yury Selivanov55c50842016-06-08 12:48:15 -0400902
903 The socket must be bound to an address and listening
Victor Stinnerc1567df2014-02-08 23:22:58 +0100904 for connections. The return value is a pair ``(conn, address)`` where *conn*
905 is a *new* socket object usable to send and receive data on the connection,
906 and *address* is the address bound to the socket on the other end of the
907 connection.
908
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400909 *sock* must be a non-blocking socket.
Victor Stinnerec2ce092014-07-29 23:12:22 +0200910
Yury Selivanov19a44f62017-12-14 20:53:26 -0500911 .. versionchanged:: 3.7
912 Even though the method was always documented as a coroutine
913 method, before Python 3.7 it returned a :class:`Future`.
914 Since Python 3.7, this is an ``async def`` method.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100915
916 .. seealso::
917
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700918 :meth:`loop.create_server` and :func:`start_server`.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100919
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700920.. coroutinemethod:: loop.sock_sendfile(sock, file, offset=0, count=None, \
921 \*, fallback=True)
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200922
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700923 Send a file using high-performance :mod:`os.sendfile` if possible.
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400924 Return the total number of bytes sent.
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200925
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700926 Asynchronous version of :meth:`socket.sendfile() <socket.socket.sendfile>`.
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200927
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400928 *sock* must be a non-blocking :const:`socket.SOCK_STREAM`
929 :class:`~socket.socket`.
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200930
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400931 *file* must be a regular file object open in binary mode.
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200932
933 *offset* tells from where to start reading the file. If specified,
934 *count* is the total number of bytes to transmit as opposed to
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400935 sending the file until EOF is reached. File position is always updated,
936 even when this method raises an error, and
937 :meth:`file.tell() <io.IOBase.tell>` can be used to obtain the actual
938 number of bytes sent.
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200939
Carol Willing5b7cbd62018-09-12 17:05:17 -0700940 *fallback*, when set to ``True``, makes asyncio manually read and send
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200941 the file when the platform does not support the sendfile syscall
942 (e.g. Windows or SSL socket on Unix).
943
Andrew Svetlov7464e872018-01-19 20:04:29 +0200944 Raise :exc:`SendfileNotAvailableError` if the system does not support
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200945 *sendfile* syscall and *fallback* is ``False``.
946
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400947 *sock* must be a non-blocking socket.
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700948
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200949 .. versionadded:: 3.7
950
Victor Stinnerc1567df2014-02-08 23:22:58 +0100951
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700952DNS
953^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +0100954
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700955.. coroutinemethod:: loop.getaddrinfo(host, port, \*, family=0, \
956 type=0, proto=0, flags=0)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100957
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700958 Asynchronous version of :meth:`socket.getaddrinfo`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100959
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700960.. coroutinemethod:: loop.getnameinfo(sockaddr, flags=0)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100961
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700962 Asynchronous version of :meth:`socket.getnameinfo`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100963
Yury Selivanovbec23722018-01-28 14:09:40 -0500964.. versionchanged:: 3.7
965 Both *getaddrinfo* and *getnameinfo* methods were always documented
966 to return a coroutine, but prior to Python 3.7 they were, in fact,
967 returning :class:`asyncio.Future` objects. Starting with Python 3.7
968 both methods are coroutines.
969
Victor Stinnerea3183f2013-12-03 01:08:00 +0100970
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700971Working with pipes
972^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +0100973
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700974.. coroutinemethod:: loop.connect_read_pipe(protocol_factory, pipe)
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200975
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400976 Register the read end of *pipe* in the event loop.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100977
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700978 *protocol_factory* must be a callable returning an
979 :ref:`asyncio protocol <asyncio-protocol>` implementation.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100980
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700981 *pipe* is a :term:`file-like object <file object>`.
982
983 Return pair ``(transport, protocol)``, where *transport* supports
Bumsik Kim5cc583d2018-09-16 19:40:44 -0400984 the :class:`ReadTransport` interface and *protocol* is an object
985 instantiated by the *protocol_factory*.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100986
Victor Stinnerd84fd732014-08-26 01:01:59 +0200987 With :class:`SelectorEventLoop` event loop, the *pipe* is set to
988 non-blocking mode.
989
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700990.. coroutinemethod:: loop.connect_write_pipe(protocol_factory, pipe)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100991
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400992 Register the write end of *pipe* in the event loop.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100993
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700994 *protocol_factory* must be a callable returning an
995 :ref:`asyncio protocol <asyncio-protocol>` implementation.
996
997 *pipe* is :term:`file-like object <file object>`.
998
Victor Stinner2cef3002014-10-23 22:38:46 +0200999 Return pair ``(transport, protocol)``, where *transport* supports
Bumsik Kim5cc583d2018-09-16 19:40:44 -04001000 :class:`WriteTransport` interface and *protocol* is an object
1001 instantiated by the *protocol_factory*.
Victor Stinnerea3183f2013-12-03 01:08:00 +01001002
Victor Stinnerd84fd732014-08-26 01:01:59 +02001003 With :class:`SelectorEventLoop` event loop, the *pipe* is set to
1004 non-blocking mode.
1005
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001006.. note::
1007
1008 :class:`SelectorEventLoop` does not support the above methods on
Carol Willing5b7cbd62018-09-12 17:05:17 -07001009 Windows. Use :class:`ProactorEventLoop` instead for Windows.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001010
Victor Stinner08444382014-02-02 22:43:39 +01001011.. seealso::
1012
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001013 The :meth:`loop.subprocess_exec` and
1014 :meth:`loop.subprocess_shell` methods.
Victor Stinner08444382014-02-02 22:43:39 +01001015
Victor Stinnerea3183f2013-12-03 01:08:00 +01001016
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001017Unix signals
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001018^^^^^^^^^^^^
Victor Stinner8b863482014-01-27 10:07:50 +01001019
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001020.. method:: loop.add_signal_handler(signum, callback, \*args)
Victor Stinner8b863482014-01-27 10:07:50 +01001021
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001022 Set *callback* as the handler for the *signum* signal.
Victor Stinner8b863482014-01-27 10:07:50 +01001023
Hrvoje Nikšiće3666fc2018-12-18 22:31:29 +01001024 The callback will be invoked by *loop*, along with other queued callbacks
1025 and runnable coroutines of that event loop. Unlike signal handlers
1026 registered using :func:`signal.signal`, a callback registered with this
1027 function is allowed to interact with the event loop.
1028
Victor Stinner8b863482014-01-27 10:07:50 +01001029 Raise :exc:`ValueError` if the signal number is invalid or uncatchable.
1030 Raise :exc:`RuntimeError` if there is a problem setting up the handler.
1031
Yury Selivanove247b462018-09-20 12:43:59 -04001032 Use :func:`functools.partial` :ref:`to pass keyword arguments
Naglis17473342018-12-04 09:31:15 +02001033 <asyncio-pass-keywords>` to *callback*.
Victor Stinner8464c242014-11-28 13:15:41 +01001034
Hrvoje Nikšiće3666fc2018-12-18 22:31:29 +01001035 Like :func:`signal.signal`, this function must be invoked in the main
1036 thread.
1037
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001038.. method:: loop.remove_signal_handler(sig)
Victor Stinner8b863482014-01-27 10:07:50 +01001039
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001040 Remove the handler for the *sig* signal.
Victor Stinner8b863482014-01-27 10:07:50 +01001041
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001042 Return ``True`` if the signal handler was removed, or ``False`` if
1043 no handler was set for the given signal.
Victor Stinner8b863482014-01-27 10:07:50 +01001044
Cheryl Sabella2d6097d2018-10-12 10:55:20 -04001045 .. availability:: Unix.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001046
Victor Stinner8b863482014-01-27 10:07:50 +01001047.. seealso::
1048
1049 The :mod:`signal` module.
1050
1051
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001052Executing code in thread or process pools
1053^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +01001054
Yury Selivanov47150392018-09-18 17:55:44 -04001055.. awaitablemethod:: loop.run_in_executor(executor, func, \*args)
Victor Stinnerea3183f2013-12-03 01:08:00 +01001056
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001057 Arrange for *func* to be called in the specified executor.
Victor Stinnerea3183f2013-12-03 01:08:00 +01001058
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001059 The *executor* argument should be an :class:`concurrent.futures.Executor`
Larry Hastings3732ed22014-03-15 21:13:56 -07001060 instance. The default executor is used if *executor* is ``None``.
Victor Stinnerea3183f2013-12-03 01:08:00 +01001061
Yury Selivanove247b462018-09-20 12:43:59 -04001062 Example::
1063
1064 import asyncio
1065 import concurrent.futures
1066
1067 def blocking_io():
1068 # File operations (such as logging) can block the
1069 # event loop: run them in a thread pool.
1070 with open('/dev/urandom', 'rb') as f:
1071 return f.read(100)
1072
1073 def cpu_bound():
1074 # CPU-bound operations will block the event loop:
1075 # in general it is preferable to run them in a
1076 # process pool.
1077 return sum(i * i for i in range(10 ** 7))
1078
1079 async def main():
1080 loop = asyncio.get_running_loop()
1081
1082 ## Options:
1083
1084 # 1. Run in the default loop's executor:
1085 result = await loop.run_in_executor(
1086 None, blocking_io)
1087 print('default thread pool', result)
1088
1089 # 2. Run in a custom thread pool:
1090 with concurrent.futures.ThreadPoolExecutor() as pool:
1091 result = await loop.run_in_executor(
1092 pool, blocking_io)
1093 print('custom thread pool', result)
1094
1095 # 3. Run in a custom process pool:
1096 with concurrent.futures.ProcessPoolExecutor() as pool:
1097 result = await loop.run_in_executor(
1098 pool, cpu_bound)
1099 print('custom process pool', result)
1100
1101 asyncio.run(main())
Victor Stinner8464c242014-11-28 13:15:41 +01001102
Yury Selivanovbec23722018-01-28 14:09:40 -05001103 This method returns a :class:`asyncio.Future` object.
1104
Yury Selivanove247b462018-09-20 12:43:59 -04001105 Use :func:`functools.partial` :ref:`to pass keyword arguments
1106 <asyncio-pass-keywords>` to *func*.
1107
Yury Selivanove8a60452016-10-21 17:40:42 -04001108 .. versionchanged:: 3.5.3
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001109 :meth:`loop.run_in_executor` no longer configures the
Yury Selivanove8a60452016-10-21 17:40:42 -04001110 ``max_workers`` of the thread pool executor it creates, instead
1111 leaving it up to the thread pool executor
1112 (:class:`~concurrent.futures.ThreadPoolExecutor`) to set the
1113 default.
1114
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001115.. method:: loop.set_default_executor(executor)
Victor Stinnerea3183f2013-12-03 01:08:00 +01001116
Elvis Pranskevichus22d25082018-07-30 11:42:43 +01001117 Set *executor* as the default executor used by :meth:`run_in_executor`.
1118 *executor* should be an instance of
1119 :class:`~concurrent.futures.ThreadPoolExecutor`.
1120
1121 .. deprecated:: 3.8
1122 Using an executor that is not an instance of
1123 :class:`~concurrent.futures.ThreadPoolExecutor` is deprecated and
1124 will trigger an error in Python 3.9.
Victor Stinnerea3183f2013-12-03 01:08:00 +01001125
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001126 *executor* must be an instance of
1127 :class:`concurrent.futures.ThreadPoolExecutor`.
1128
Victor Stinnerea3183f2013-12-03 01:08:00 +01001129
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001130Error Handling API
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001131^^^^^^^^^^^^^^^^^^
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001132
Martin Panterc04fb562016-02-10 05:44:01 +00001133Allows customizing how exceptions are handled in the event loop.
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001134
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001135.. method:: loop.set_exception_handler(handler)
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001136
1137 Set *handler* as the new event loop exception handler.
1138
1139 If *handler* is ``None``, the default exception handler will
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001140 be set. Otherwise, *handler* must be a callable with the signature
1141 matching ``(loop, context)``, where ``loop``
1142 is a reference to the active event loop, and ``context``
1143 is a ``dict`` object containing the details of the exception
1144 (see :meth:`call_exception_handler` documentation for details
1145 about context).
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001146
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001147.. method:: loop.get_exception_handler()
Yury Selivanov950204d2016-05-16 16:23:00 -04001148
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001149 Return the current exception handler, or ``None`` if no custom
1150 exception handler was set.
Yury Selivanov950204d2016-05-16 16:23:00 -04001151
1152 .. versionadded:: 3.5.2
1153
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001154.. method:: loop.default_exception_handler(context)
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001155
1156 Default exception handler.
1157
1158 This is called when an exception occurs and no exception
Carol Willing5b7cbd62018-09-12 17:05:17 -07001159 handler is set. This can be called by a custom exception
1160 handler that wants to defer to the default handler behavior.
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001161
1162 *context* parameter has the same meaning as in
1163 :meth:`call_exception_handler`.
1164
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001165.. method:: loop.call_exception_handler(context)
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001166
1167 Call the current event loop exception handler.
1168
1169 *context* is a ``dict`` object containing the following keys
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001170 (new keys may be introduced in future Python versions):
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001171
1172 * 'message': Error message;
1173 * 'exception' (optional): Exception object;
1174 * 'future' (optional): :class:`asyncio.Future` instance;
1175 * 'handle' (optional): :class:`asyncio.Handle` instance;
1176 * 'protocol' (optional): :ref:`Protocol <asyncio-protocol>` instance;
1177 * 'transport' (optional): :ref:`Transport <asyncio-transport>` instance;
1178 * 'socket' (optional): :class:`socket.socket` instance.
1179
1180 .. note::
1181
Carol Willing5b7cbd62018-09-12 17:05:17 -07001182 This method should not be overloaded in subclassed
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001183 event loops. For custom exception handling, use
1184 the :meth:`set_exception_handler()` method.
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001185
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001186Enabling debug mode
1187^^^^^^^^^^^^^^^^^^^
Victor Stinner0f3e6bc2014-02-19 23:15:02 +01001188
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001189.. method:: loop.get_debug()
Victor Stinner0f3e6bc2014-02-19 23:15:02 +01001190
Victor Stinner7b7120e2014-06-23 00:12:14 +02001191 Get the debug mode (:class:`bool`) of the event loop.
1192
1193 The default value is ``True`` if the environment variable
1194 :envvar:`PYTHONASYNCIODEBUG` is set to a non-empty string, ``False``
1195 otherwise.
Victor Stinner0f3e6bc2014-02-19 23:15:02 +01001196
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001197.. method:: loop.set_debug(enabled: bool)
Victor Stinner0f3e6bc2014-02-19 23:15:02 +01001198
1199 Set the debug mode of the event loop.
1200
Yury Selivanov805e27e2018-09-14 16:57:11 -07001201 .. versionchanged:: 3.7
1202
1203 The new ``-X dev`` command line option can now also be used
1204 to enable the debug mode.
1205
Victor Stinner0f3e6bc2014-02-19 23:15:02 +01001206.. seealso::
1207
Victor Stinner62511fd2014-06-23 00:36:11 +02001208 The :ref:`debug mode of asyncio <asyncio-debug-mode>`.
Victor Stinner0f3e6bc2014-02-19 23:15:02 +01001209
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001210
1211Running Subprocesses
1212^^^^^^^^^^^^^^^^^^^^
1213
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001214Methods described in this subsections are low-level. In regular
1215async/await code consider using the high-level
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001216:func:`asyncio.create_subprocess_shell` and
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001217:func:`asyncio.create_subprocess_exec` convenience functions instead.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001218
1219.. note::
1220
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001221 The default asyncio event loop on **Windows** does not support
1222 subprocesses. See :ref:`Subprocess Support on Windows
1223 <asyncio-windows-subprocess>` for details.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001224
1225.. coroutinemethod:: loop.subprocess_exec(protocol_factory, \*args, \
1226 stdin=subprocess.PIPE, stdout=subprocess.PIPE, \
1227 stderr=subprocess.PIPE, \*\*kwargs)
1228
1229 Create a subprocess from one or more string arguments specified by
1230 *args*.
1231
1232 *args* must be a list of strings represented by:
1233
1234 * :class:`str`;
1235 * or :class:`bytes`, encoded to the
1236 :ref:`filesystem encoding <filesystem-encoding>`.
1237
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001238 The first string specifies the program executable,
Carol Willing5b7cbd62018-09-12 17:05:17 -07001239 and the remaining strings specify the arguments. Together, string
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001240 arguments form the ``argv`` of the program.
1241
1242 This is similar to the standard library :class:`subprocess.Popen`
1243 class called with ``shell=False`` and the list of strings passed as
1244 the first argument; however, where :class:`~subprocess.Popen` takes
1245 a single argument which is list of strings, *subprocess_exec*
1246 takes multiple string arguments.
1247
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001248 The *protocol_factory* must be a callable returning a subclass of the
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001249 :class:`asyncio.SubprocessProtocol` class.
1250
1251 Other parameters:
1252
sbstpf0d4c642019-05-27 19:51:19 -04001253 * *stdin* can be any of these:
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001254
sbstpf0d4c642019-05-27 19:51:19 -04001255 * a file-like object representing a pipe to be connected to the
1256 subprocess's standard input stream using
1257 :meth:`~loop.connect_write_pipe`
1258 * the :const:`subprocess.PIPE` constant (default) which will create a new
1259 pipe and connect it,
1260 * the value ``None`` which will make the subprocess inherit the file
1261 descriptor from this process
1262 * the :const:`subprocess.DEVNULL` constant which indicates that the
1263 special :data:`os.devnull` file will be used
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001264
sbstpf0d4c642019-05-27 19:51:19 -04001265 * *stdout* can be any of these:
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001266
sbstpf0d4c642019-05-27 19:51:19 -04001267 * a file-like object representing a pipe to be connected to the
1268 subprocess's standard output stream using
1269 :meth:`~loop.connect_write_pipe`
1270 * the :const:`subprocess.PIPE` constant (default) which will create a new
1271 pipe and connect it,
1272 * the value ``None`` which will make the subprocess inherit the file
1273 descriptor from this process
1274 * the :const:`subprocess.DEVNULL` constant which indicates that the
1275 special :data:`os.devnull` file will be used
1276
1277 * *stderr* can be any of these:
1278
1279 * a file-like object representing a pipe to be connected to the
1280 subprocess's standard error stream using
1281 :meth:`~loop.connect_write_pipe`
1282 * the :const:`subprocess.PIPE` constant (default) which will create a new
1283 pipe and connect it,
1284 * the value ``None`` which will make the subprocess inherit the file
1285 descriptor from this process
1286 * the :const:`subprocess.DEVNULL` constant which indicates that the
1287 special :data:`os.devnull` file will be used
1288 * the :const:`subprocess.STDOUT` constant which will connect the standard
1289 error stream to the process' standard output stream
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001290
1291 * All other keyword arguments are passed to :class:`subprocess.Popen`
sbstpf0d4c642019-05-27 19:51:19 -04001292 without interpretation, except for *bufsize*, *universal_newlines*,
1293 *shell*, *text*, *encoding* and *errors*, which should not be specified
1294 at all.
1295
1296 The ``asyncio`` subprocess API does not support decoding the streams
1297 as text. :func:`bytes.decode` can be used to convert the bytes returned
1298 from the stream to text.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001299
1300 See the constructor of the :class:`subprocess.Popen` class
1301 for documentation on other arguments.
1302
1303 Returns a pair of ``(transport, protocol)``, where *transport*
Bumsik Kim5cc583d2018-09-16 19:40:44 -04001304 conforms to the :class:`asyncio.SubprocessTransport` base class and
1305 *protocol* is an object instantiated by the *protocol_factory*.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001306
1307.. coroutinemethod:: loop.subprocess_shell(protocol_factory, cmd, \*, \
1308 stdin=subprocess.PIPE, stdout=subprocess.PIPE, \
1309 stderr=subprocess.PIPE, \*\*kwargs)
1310
1311 Create a subprocess from *cmd*, which can be a :class:`str` or a
1312 :class:`bytes` string encoded to the
1313 :ref:`filesystem encoding <filesystem-encoding>`,
1314 using the platform's "shell" syntax.
1315
1316 This is similar to the standard library :class:`subprocess.Popen`
1317 class called with ``shell=True``.
1318
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001319 The *protocol_factory* must be a callable returning a subclass of the
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001320 :class:`SubprocessProtocol` class.
1321
1322 See :meth:`~loop.subprocess_exec` for more details about
1323 the remaining arguments.
1324
1325 Returns a pair of ``(transport, protocol)``, where *transport*
Bumsik Kim5cc583d2018-09-16 19:40:44 -04001326 conforms to the :class:`SubprocessTransport` base class and
1327 *protocol* is an object instantiated by the *protocol_factory*.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001328
1329.. note::
1330 It is the application's responsibility to ensure that all whitespace
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001331 and special characters are quoted appropriately to avoid `shell injection
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001332 <https://en.wikipedia.org/wiki/Shell_injection#Shell_injection>`_
1333 vulnerabilities. The :func:`shlex.quote` function can be used to
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001334 properly escape whitespace and special characters in strings that
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001335 are going to be used to construct shell commands.
1336
1337
1338Callback Handles
1339================
1340
1341.. class:: Handle
1342
1343 A callback wrapper object returned by :meth:`loop.call_soon`,
1344 :meth:`loop.call_soon_threadsafe`.
1345
1346 .. method:: cancel()
1347
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001348 Cancel the callback. If the callback has already been canceled
1349 or executed, this method has no effect.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001350
1351 .. method:: cancelled()
1352
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001353 Return ``True`` if the callback was cancelled.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001354
1355 .. versionadded:: 3.7
1356
1357.. class:: TimerHandle
1358
1359 A callback wrapper object returned by :meth:`loop.call_later`,
1360 and :meth:`loop.call_at`.
1361
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001362 This class is a subclass of :class:`Handle`.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001363
1364 .. method:: when()
1365
1366 Return a scheduled callback time as :class:`float` seconds.
1367
1368 The time is an absolute timestamp, using the same time
1369 reference as :meth:`loop.time`.
1370
1371 .. versionadded:: 3.7
1372
1373
1374Server Objects
1375==============
1376
1377Server objects are created by :meth:`loop.create_server`,
1378:meth:`loop.create_unix_server`, :func:`start_server`,
1379and :func:`start_unix_server` functions.
1380
1381Do not instantiate the class directly.
Victor Stinner8c462c52014-01-24 18:11:43 +01001382
Victor Stinner8ebeb032014-07-11 23:47:40 +02001383.. class:: Server
Victor Stinner8c462c52014-01-24 18:11:43 +01001384
Yury Selivanovc9070d02018-01-25 18:08:09 -05001385 *Server* objects are asynchronous context managers. When used in an
1386 ``async with`` statement, it's guaranteed that the Server object is
1387 closed and not accepting new connections when the ``async with``
1388 statement is completed::
1389
1390 srv = await loop.create_server(...)
1391
1392 async with srv:
1393 # some code
1394
Carol Willing5b7cbd62018-09-12 17:05:17 -07001395 # At this point, srv is closed and no longer accepts new connections.
Yury Selivanovc9070d02018-01-25 18:08:09 -05001396
1397
1398 .. versionchanged:: 3.7
1399 Server object is an asynchronous context manager since Python 3.7.
Victor Stinner8c462c52014-01-24 18:11:43 +01001400
1401 .. method:: close()
1402
Victor Stinner4bfb14a2014-07-12 03:20:24 +02001403 Stop serving: close listening sockets and set the :attr:`sockets`
1404 attribute to ``None``.
1405
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001406 The sockets that represent existing incoming client connections
1407 are left open.
Victor Stinner8ebeb032014-07-11 23:47:40 +02001408
Berker Peksag49c9edf2016-01-20 07:14:22 +02001409 The server is closed asynchronously, use the :meth:`wait_closed`
1410 coroutine to wait until the server is closed.
Victor Stinner8c462c52014-01-24 18:11:43 +01001411
Srinivas Reddy Thatiparthy (శ్రీనివాస్ రెడ్డి తాటిపర్తి)1634fc22017-12-30 20:39:32 +05301412 .. method:: get_loop()
1413
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001414 Return the event loop associated with the server object.
Srinivas Reddy Thatiparthy (శ్రీనివాస్ రెడ్డి తాటిపర్తి)1634fc22017-12-30 20:39:32 +05301415
1416 .. versionadded:: 3.7
1417
Yury Selivanovc9070d02018-01-25 18:08:09 -05001418 .. coroutinemethod:: start_serving()
1419
1420 Start accepting connections.
1421
1422 This method is idempotent, so it can be called when
1423 the server is already being serving.
1424
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001425 The *start_serving* keyword-only parameter to
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001426 :meth:`loop.create_server` and
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001427 :meth:`asyncio.start_server` allows creating a Server object
1428 that is not accepting connections initially. In this case
1429 ``Server.start_serving()``, or :meth:`Server.serve_forever` can be used
1430 to make the Server start accepting connections.
Yury Selivanovc9070d02018-01-25 18:08:09 -05001431
1432 .. versionadded:: 3.7
1433
1434 .. coroutinemethod:: serve_forever()
1435
1436 Start accepting connections until the coroutine is cancelled.
1437 Cancellation of ``serve_forever`` task causes the server
1438 to be closed.
1439
1440 This method can be called if the server is already accepting
1441 connections. Only one ``serve_forever`` task can exist per
1442 one *Server* object.
1443
1444 Example::
1445
1446 async def client_connected(reader, writer):
1447 # Communicate with the client with
1448 # reader/writer streams. For example:
1449 await reader.readline()
1450
1451 async def main(host, port):
1452 srv = await asyncio.start_server(
1453 client_connected, host, port)
Andrew Svetlov17ab8f02018-02-17 19:44:35 +02001454 await srv.serve_forever()
Yury Selivanovc9070d02018-01-25 18:08:09 -05001455
1456 asyncio.run(main('127.0.0.1', 0))
1457
1458 .. versionadded:: 3.7
1459
1460 .. method:: is_serving()
1461
1462 Return ``True`` if the server is accepting new connections.
1463
1464 .. versionadded:: 3.7
1465
Victor Stinnerbdd574d2015-02-12 22:49:18 +01001466 .. coroutinemethod:: wait_closed()
Victor Stinner8c462c52014-01-24 18:11:43 +01001467
Victor Stinner8ebeb032014-07-11 23:47:40 +02001468 Wait until the :meth:`close` method completes.
1469
Victor Stinner8ebeb032014-07-11 23:47:40 +02001470 .. attribute:: sockets
1471
Emmanuel Ariasdf5cdc12019-02-22 14:34:41 -03001472 List of :class:`socket.socket` objects the server is listening on.
Victor Stinner8c462c52014-01-24 18:11:43 +01001473
Yury Selivanovc9070d02018-01-25 18:08:09 -05001474 .. versionchanged:: 3.7
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001475 Prior to Python 3.7 ``Server.sockets`` used to return an
1476 internal list of server sockets directly. In 3.7 a copy
Yury Selivanovc9070d02018-01-25 18:08:09 -05001477 of that list is returned.
1478
Victor Stinner8c462c52014-01-24 18:11:43 +01001479
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001480.. _asyncio-event-loops:
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001481
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001482Event Loop Implementations
1483==========================
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001484
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001485asyncio ships with two different event loop implementations:
1486:class:`SelectorEventLoop` and :class:`ProactorEventLoop`.
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001487
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001488By default asyncio is configured to use :class:`SelectorEventLoop`
Ben Darnell9ffca672019-06-22 13:38:21 -04001489on Unix and :class:`ProactorEventLoop` on Windows.
Andrew Svetlov3d4dbd82018-02-01 19:59:32 +02001490
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001491
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001492.. class:: SelectorEventLoop
1493
1494 An event loop based on the :mod:`selectors` module.
1495
1496 Uses the most efficient *selector* available for the given
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001497 platform. It is also possible to manually configure the
1498 exact selector implementation to be used::
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001499
1500 import asyncio
1501 import selectors
1502
1503 selector = selectors.SelectSelector()
1504 loop = asyncio.SelectorEventLoop(selector)
1505 asyncio.set_event_loop(loop)
Andrew Svetlov7464e872018-01-19 20:04:29 +02001506
1507
Cheryl Sabella2d6097d2018-10-12 10:55:20 -04001508 .. availability:: Unix, Windows.
Andrew Svetlov7464e872018-01-19 20:04:29 +02001509
1510
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001511.. class:: ProactorEventLoop
1512
1513 An event loop for Windows that uses "I/O Completion Ports" (IOCP).
1514
Cheryl Sabella2d6097d2018-10-12 10:55:20 -04001515 .. availability:: Windows.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001516
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001517 .. seealso::
1518
1519 `MSDN documentation on I/O Completion Ports
1520 <https://docs.microsoft.com/en-ca/windows/desktop/FileIO/i-o-completion-ports>`_.
1521
1522
1523.. class:: AbstractEventLoop
1524
1525 Abstract base class for asyncio-compliant event loops.
1526
1527 The :ref:`Event Loop Methods <asyncio-event-loop>` section lists all
1528 methods that an alternative implementation of ``AbstractEventLoop``
1529 should have defined.
1530
1531
1532Examples
1533========
1534
1535Note that all examples in this section **purposefully** show how
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001536to use the low-level event loop APIs, such as :meth:`loop.run_forever`
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001537and :meth:`loop.call_soon`. Modern asyncio applications rarely
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001538need to be written this way; consider using the high-level functions
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001539like :func:`asyncio.run`.
1540
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001541
Yury Selivanov394374e2018-09-17 15:35:24 -04001542.. _asyncio_example_lowlevel_helloworld:
Victor Stinnerea3183f2013-12-03 01:08:00 +01001543
Victor Stinner7f314ed2014-10-15 18:49:16 +02001544Hello World with call_soon()
Victor Stinnera092a612015-01-09 15:58:41 +01001545^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +01001546
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001547An example using the :meth:`loop.call_soon` method to schedule a
1548callback. The callback displays ``"Hello World"`` and then stops the
1549event loop::
Victor Stinnerea3183f2013-12-03 01:08:00 +01001550
1551 import asyncio
1552
Victor Stinner7f314ed2014-10-15 18:49:16 +02001553 def hello_world(loop):
Carol Willing5b7cbd62018-09-12 17:05:17 -07001554 """A callback to print 'Hello World' and stop the event loop"""
Victor Stinnerea3183f2013-12-03 01:08:00 +01001555 print('Hello World')
Victor Stinner7f314ed2014-10-15 18:49:16 +02001556 loop.stop()
Victor Stinnerea3183f2013-12-03 01:08:00 +01001557
1558 loop = asyncio.get_event_loop()
Victor Stinner7f314ed2014-10-15 18:49:16 +02001559
1560 # Schedule a call to hello_world()
1561 loop.call_soon(hello_world, loop)
1562
1563 # Blocking call interrupted by loop.stop()
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001564 try:
1565 loop.run_forever()
1566 finally:
1567 loop.close()
Victor Stinnerea3183f2013-12-03 01:08:00 +01001568
Victor Stinner3e09e322013-12-03 01:22:06 +01001569.. seealso::
Victor Stinnerea3183f2013-12-03 01:08:00 +01001570
Yury Selivanov3faaa882018-09-14 13:32:07 -07001571 A similar :ref:`Hello World <coroutine>`
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001572 example created with a coroutine and the :func:`run` function.
Victor Stinnerea3183f2013-12-03 01:08:00 +01001573
Victor Stinner8b863482014-01-27 10:07:50 +01001574
Yury Selivanov394374e2018-09-17 15:35:24 -04001575.. _asyncio_example_call_later:
Victor Stinner7f314ed2014-10-15 18:49:16 +02001576
1577Display the current date with call_later()
Victor Stinnera092a612015-01-09 15:58:41 +01001578^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinner7f314ed2014-10-15 18:49:16 +02001579
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001580An example of a callback displaying the current date every second. The
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001581callback uses the :meth:`loop.call_later` method to reschedule itself
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001582after 5 seconds, and then stops the event loop::
Victor Stinner7f314ed2014-10-15 18:49:16 +02001583
1584 import asyncio
1585 import datetime
1586
1587 def display_date(end_time, loop):
1588 print(datetime.datetime.now())
1589 if (loop.time() + 1.0) < end_time:
1590 loop.call_later(1, display_date, end_time, loop)
1591 else:
1592 loop.stop()
1593
1594 loop = asyncio.get_event_loop()
1595
1596 # Schedule the first call to display_date()
1597 end_time = loop.time() + 5.0
1598 loop.call_soon(display_date, end_time, loop)
1599
1600 # Blocking call interrupted by loop.stop()
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001601 try:
1602 loop.run_forever()
1603 finally:
1604 loop.close()
Victor Stinner7f314ed2014-10-15 18:49:16 +02001605
1606.. seealso::
1607
Yury Selivanov7372c3b2018-09-14 15:11:24 -07001608 A similar :ref:`current date <asyncio_example_sleep>` example
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001609 created with a coroutine and the :func:`run` function.
Victor Stinner7f314ed2014-10-15 18:49:16 +02001610
1611
Yury Selivanov394374e2018-09-17 15:35:24 -04001612.. _asyncio_example_watch_fd:
Victor Stinner8b863482014-01-27 10:07:50 +01001613
Victor Stinner04e6df32014-10-11 16:16:27 +02001614Watch a file descriptor for read events
Victor Stinnera092a612015-01-09 15:58:41 +01001615^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinner04e6df32014-10-11 16:16:27 +02001616
1617Wait until a file descriptor received some data using the
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001618:meth:`loop.add_reader` method and then close the event loop::
Victor Stinner04e6df32014-10-11 16:16:27 +02001619
1620 import asyncio
Victor Stinnerac577d72017-11-28 21:33:20 +01001621 from socket import socketpair
Victor Stinner04e6df32014-10-11 16:16:27 +02001622
1623 # Create a pair of connected file descriptors
Victor Stinnerccd8e342014-10-11 16:30:02 +02001624 rsock, wsock = socketpair()
Carol Willing5b7cbd62018-09-12 17:05:17 -07001625
Victor Stinner04e6df32014-10-11 16:16:27 +02001626 loop = asyncio.get_event_loop()
1627
1628 def reader():
1629 data = rsock.recv(100)
1630 print("Received:", data.decode())
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001631
Victor Stinner2cef3002014-10-23 22:38:46 +02001632 # We are done: unregister the file descriptor
Victor Stinner04e6df32014-10-11 16:16:27 +02001633 loop.remove_reader(rsock)
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001634
Victor Stinner04e6df32014-10-11 16:16:27 +02001635 # Stop the event loop
1636 loop.stop()
1637
Victor Stinner2cef3002014-10-23 22:38:46 +02001638 # Register the file descriptor for read event
Victor Stinner04e6df32014-10-11 16:16:27 +02001639 loop.add_reader(rsock, reader)
1640
1641 # Simulate the reception of data from the network
1642 loop.call_soon(wsock.send, 'abc'.encode())
1643
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001644 try:
1645 # Run the event loop
1646 loop.run_forever()
1647 finally:
Carol Willing5b7cbd62018-09-12 17:05:17 -07001648 # We are done. Close sockets and the event loop.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001649 rsock.close()
1650 wsock.close()
1651 loop.close()
Victor Stinner04e6df32014-10-11 16:16:27 +02001652
1653.. seealso::
1654
Yury Selivanov394374e2018-09-17 15:35:24 -04001655 * A similar :ref:`example <asyncio_example_create_connection>`
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001656 using transports, protocols, and the
1657 :meth:`loop.create_connection` method.
Victor Stinner04e6df32014-10-11 16:16:27 +02001658
Yury Selivanov394374e2018-09-17 15:35:24 -04001659 * Another similar :ref:`example <asyncio_example_create_connection-streams>`
Yury Selivanov6758e6e2019-09-29 21:59:55 -07001660 using the high-level :func:`asyncio.open_connection` function
1661 and streams.
Victor Stinner04e6df32014-10-11 16:16:27 +02001662
1663
Yury Selivanov394374e2018-09-17 15:35:24 -04001664.. _asyncio_example_unix_signals:
1665
Victor Stinner04e6df32014-10-11 16:16:27 +02001666Set signal handlers for SIGINT and SIGTERM
Victor Stinnera092a612015-01-09 15:58:41 +01001667^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinner04e6df32014-10-11 16:16:27 +02001668
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001669(This ``signals`` example only works on Unix.)
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001670
1671Register handlers for signals :py:data:`SIGINT` and :py:data:`SIGTERM`
1672using the :meth:`loop.add_signal_handler` method::
Victor Stinner8b863482014-01-27 10:07:50 +01001673
1674 import asyncio
1675 import functools
1676 import os
1677 import signal
1678
Alexander Vasinceb842e2019-05-03 18:25:36 +03001679 def ask_exit(signame, loop):
Victor Stinner8b863482014-01-27 10:07:50 +01001680 print("got signal %s: exit" % signame)
1681 loop.stop()
1682
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001683 async def main():
1684 loop = asyncio.get_running_loop()
Victor Stinner8b863482014-01-27 10:07:50 +01001685
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001686 for signame in {'SIGINT', 'SIGTERM'}:
1687 loop.add_signal_handler(
1688 getattr(signal, signame),
Alexander Vasinceb842e2019-05-03 18:25:36 +03001689 functools.partial(ask_exit, signame, loop))
Victor Stinner2cef3002014-10-23 22:38:46 +02001690
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001691 await asyncio.sleep(3600)
1692
1693 print("Event loop running for 1 hour, press Ctrl+C to interrupt.")
1694 print(f"pid {os.getpid()}: send SIGINT or SIGTERM to exit.")
1695
1696 asyncio.run(main())