blob: ca91efec260db212b933119bbf270a1498fda693 [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
Serhiy Storchaka172c0f22021-04-25 13:40:44 +030056 .. deprecated:: 3.10
57 Deprecation warning is emitted if there is no running event loop.
58 If future Python releases this function will be an alias of
59 :func:`get_running_loop`.
60
Yury Selivanov7c7605f2018-09-11 09:54:40 -070061.. function:: set_event_loop(loop)
62
63 Set *loop* as a current event loop for the current OS thread.
64
65.. function:: new_event_loop()
66
67 Create a new event loop object.
68
69Note that the behaviour of :func:`get_event_loop`, :func:`set_event_loop`,
70and :func:`new_event_loop` functions can be altered by
71:ref:`setting a custom event loop policy <asyncio-policies>`.
72
73
74.. rubric:: Contents
75
76This documentation page contains the following sections:
77
Carol Willing5b7cbd62018-09-12 17:05:17 -070078* The `Event Loop Methods`_ section is the reference documentation of
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -040079 the event loop APIs;
Yury Selivanov7c7605f2018-09-11 09:54:40 -070080
81* The `Callback Handles`_ section documents the :class:`Handle` and
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -040082 :class:`TimerHandle` instances which are returned from scheduling
83 methods such as :meth:`loop.call_soon` and :meth:`loop.call_later`;
Yury Selivanov7c7605f2018-09-11 09:54:40 -070084
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -040085* The `Server Objects`_ section documents types returned from
Yury Selivanov7c7605f2018-09-11 09:54:40 -070086 event loop methods like :meth:`loop.create_server`;
87
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -040088* The `Event Loop Implementations`_ section documents the
Yury Selivanov7c7605f2018-09-11 09:54:40 -070089 :class:`SelectorEventLoop` and :class:`ProactorEventLoop` classes;
90
91* The `Examples`_ section showcases how to work with some event
92 loop APIs.
93
94
Victor Stinner9592edb2014-02-02 15:03:02 +010095.. _asyncio-event-loop:
Victor Stinnerea3183f2013-12-03 01:08:00 +010096
Yury Selivanov7c7605f2018-09-11 09:54:40 -070097Event Loop Methods
98==================
Victor Stinnerea3183f2013-12-03 01:08:00 +010099
Carol Willing5b7cbd62018-09-12 17:05:17 -0700100Event loops have **low-level** APIs for the following:
lf627d2c82017-07-25 17:03:51 -0600101
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700102.. contents::
103 :depth: 1
104 :local:
Victor Stinnerea3183f2013-12-03 01:08:00 +0100105
Victor Stinnerea3183f2013-12-03 01:08:00 +0100106
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700107Running and stopping the loop
108^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +0100109
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700110.. method:: loop.run_until_complete(future)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100111
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400112 Run until the *future* (an instance of :class:`Future`) has
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700113 completed.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100114
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700115 If the argument is a :ref:`coroutine object <coroutine>` it
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400116 is implicitly scheduled to run as a :class:`asyncio.Task`.
Eli Bendersky136fea22014-02-09 06:55:58 -0800117
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700118 Return the Future's result or raise its exception.
Guido van Rossumf68afd82016-08-08 09:41:21 -0700119
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700120.. method:: loop.run_forever()
Guido van Rossumf68afd82016-08-08 09:41:21 -0700121
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700122 Run the event loop until :meth:`stop` is called.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100123
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700124 If :meth:`stop` is called before :meth:`run_forever()` is called,
125 the loop will poll the I/O selector once with a timeout of zero,
126 run all callbacks scheduled in response to I/O events (and
127 those that were already scheduled), and then exit.
Victor Stinner83704962015-02-25 14:24:15 +0100128
Guido van Rossum41f69f42015-11-19 13:28:47 -0800129 If :meth:`stop` is called while :meth:`run_forever` is running,
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700130 the loop will run the current batch of callbacks and then exit.
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400131 Note that new callbacks scheduled by callbacks will not run in this
Carol Willing5b7cbd62018-09-12 17:05:17 -0700132 case; instead, they will run the next time :meth:`run_forever` or
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700133 :meth:`run_until_complete` is called.
Guido van Rossum41f69f42015-11-19 13:28:47 -0800134
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700135.. method:: loop.stop()
Victor Stinnerea3183f2013-12-03 01:08:00 +0100136
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700137 Stop the event loop.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100138
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700139.. method:: loop.is_running()
Victor Stinnerea3183f2013-12-03 01:08:00 +0100140
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700141 Return ``True`` if the event loop is currently running.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100142
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700143.. method:: loop.is_closed()
Victor Stinnerea3183f2013-12-03 01:08:00 +0100144
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700145 Return ``True`` if the event loop was closed.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100146
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700147.. method:: loop.close()
Victor Stinnerea3183f2013-12-03 01:08:00 +0100148
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700149 Close the event loop.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100150
Andriy Maletskyb83d9172018-10-29 23:39:21 +0200151 The loop must not be running when this function is called.
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700152 Any pending callbacks will be discarded.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100153
Łukasz Langa7f9a2ae2019-06-04 13:03:20 +0200154 This method clears all queues and shuts down the executor, but does
155 not wait for the executor to finish.
Guido van Rossum41f69f42015-11-19 13:28:47 -0800156
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700157 This method is idempotent and irreversible. No other methods
158 should be called after the event loop is closed.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100159
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700160.. coroutinemethod:: loop.shutdown_asyncgens()
Yury Selivanov03660042016-12-15 17:36:05 -0500161
162 Schedule all currently open :term:`asynchronous generator` objects to
163 close with an :meth:`~agen.aclose()` call. After calling this method,
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700164 the event loop will issue a warning if a new asynchronous generator
Carol Willing5b7cbd62018-09-12 17:05:17 -0700165 is iterated. This should be used to reliably finalize all scheduled
Yury Selivanovac94e382018-09-17 23:58:00 -0400166 asynchronous generators.
Carol Willing5b7cbd62018-09-12 17:05:17 -0700167
Yury Selivanovac94e382018-09-17 23:58:00 -0400168 Note that there is no need to call this function when
169 :func:`asyncio.run` is used.
170
171 Example::
Yury Selivanov03660042016-12-15 17:36:05 -0500172
173 try:
174 loop.run_forever()
175 finally:
176 loop.run_until_complete(loop.shutdown_asyncgens())
177 loop.close()
178
179 .. versionadded:: 3.6
180
Kyle Stanley9fdc64c2019-09-19 08:47:22 -0400181.. coroutinemethod:: loop.shutdown_default_executor()
182
183 Schedule the closure of the default executor and wait for it to join all of
184 the threads in the :class:`ThreadPoolExecutor`. After calling this method, a
185 :exc:`RuntimeError` will be raised if :meth:`loop.run_in_executor` is called
186 while using the default executor.
187
188 Note that there is no need to call this function when
189 :func:`asyncio.run` is used.
190
191 .. versionadded:: 3.9
192
Yury Selivanov03660042016-12-15 17:36:05 -0500193
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700194Scheduling callbacks
195^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +0100196
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700197.. method:: loop.call_soon(callback, *args, context=None)
Victor Stinner8464c242014-11-28 13:15:41 +0100198
Roger Iyengara16d6972020-06-22 22:16:00 -0400199 Schedule the *callback* :term:`callback` to be called with
200 *args* arguments at the next iteration of the event loop.
Victor Stinner8464c242014-11-28 13:15:41 +0100201
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700202 Callbacks are called in the order in which they are registered.
203 Each callback will be called exactly once.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100204
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700205 An optional keyword-only *context* argument allows specifying a
206 custom :class:`contextvars.Context` for the *callback* to run in.
207 The current context is used when no *context* is provided.
Yury Selivanov28b91782018-05-23 13:35:04 -0400208
Yury Selivanov1096f762015-06-25 13:49:52 -0400209 An instance of :class:`asyncio.Handle` is returned, which can be
Carol Willing5b7cbd62018-09-12 17:05:17 -0700210 used later to cancel the callback.
211
212 This method is not thread-safe.
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500213
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700214.. method:: loop.call_soon_threadsafe(callback, *args, context=None)
Victor Stinner8464c242014-11-28 13:15:41 +0100215
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700216 A thread-safe variant of :meth:`call_soon`. Must be used to
217 schedule callbacks *from another thread*.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100218
Victor Stinner83704962015-02-25 14:24:15 +0100219 See the :ref:`concurrency and multithreading <asyncio-multithreading>`
220 section of the documentation.
221
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700222.. versionchanged:: 3.7
223 The *context* keyword-only parameter was added. See :pep:`567`
224 for more details.
225
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400226.. _asyncio-pass-keywords:
227
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700228.. note::
229
Carol Willing5b7cbd62018-09-12 17:05:17 -0700230 Most :mod:`asyncio` scheduling functions don't allow passing
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400231 keyword arguments. To do that, use :func:`functools.partial`::
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700232
Carol Willing5b7cbd62018-09-12 17:05:17 -0700233 # will schedule "print("Hello", flush=True)"
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700234 loop.call_soon(
235 functools.partial(print, "Hello", flush=True))
236
237 Using partial objects is usually more convenient than using lambdas,
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400238 as asyncio can render partial objects better in debug and error
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700239 messages.
Yury Selivanov28b91782018-05-23 13:35:04 -0400240
Victor Stinnerea3183f2013-12-03 01:08:00 +0100241
Victor Stinner45b27ed2014-02-01 02:36:43 +0100242.. _asyncio-delayed-calls:
243
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700244Scheduling delayed callbacks
245^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +0100246
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700247Event loop provides mechanisms to schedule callback functions
248to be called at some point in the future. Event loop uses monotonic
249clocks to track time.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100250
Victor Stinner45b27ed2014-02-01 02:36:43 +0100251
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700252.. method:: loop.call_later(delay, callback, *args, context=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100253
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700254 Schedule *callback* to be called after the given *delay*
255 number of seconds (can be either an int or a float).
Victor Stinnerea3183f2013-12-03 01:08:00 +0100256
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700257 An instance of :class:`asyncio.TimerHandle` is returned which can
258 be used to cancel the callback.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100259
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700260 *callback* will be called exactly once. If two callbacks are
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400261 scheduled for exactly the same time, the order in which they
262 are called is undefined.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100263
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700264 The optional positional *args* will be passed to the callback when
265 it is called. If you want the callback to be called with keyword
266 arguments use :func:`functools.partial`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100267
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700268 An optional keyword-only *context* argument allows specifying a
269 custom :class:`contextvars.Context` for the *callback* to run in.
270 The current context is used when no *context* is provided.
Victor Stinner8464c242014-11-28 13:15:41 +0100271
Yury Selivanov28b91782018-05-23 13:35:04 -0400272 .. versionchanged:: 3.7
273 The *context* keyword-only parameter was added. See :pep:`567`
274 for more details.
275
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400276 .. versionchanged:: 3.8
277 In Python 3.7 and earlier with the default event loop implementation,
278 the *delay* could not exceed one day.
279 This has been fixed in Python 3.8.
280
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700281.. method:: loop.call_at(when, callback, *args, context=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100282
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700283 Schedule *callback* to be called at the given absolute timestamp
284 *when* (an int or a float), using the same time reference as
285 :meth:`loop.time`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100286
287 This method's behavior is the same as :meth:`call_later`.
288
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700289 An instance of :class:`asyncio.TimerHandle` is returned which can
290 be used to cancel the callback.
Victor Stinner8464c242014-11-28 13:15:41 +0100291
Yury Selivanov28b91782018-05-23 13:35:04 -0400292 .. versionchanged:: 3.7
293 The *context* keyword-only parameter was added. See :pep:`567`
294 for more details.
295
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400296 .. versionchanged:: 3.8
297 In Python 3.7 and earlier with the default event loop implementation,
298 the difference between *when* and the current time could not exceed
299 one day. This has been fixed in Python 3.8.
300
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700301.. method:: loop.time()
Victor Stinnerea3183f2013-12-03 01:08:00 +0100302
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700303 Return the current time, as a :class:`float` value, according to
304 the event loop's internal monotonic clock.
305
306.. note::
Enrico Alarico Carbognani7e954e72019-04-18 14:43:14 +0200307 .. versionchanged:: 3.8
308 In Python 3.7 and earlier timeouts (relative *delay* or absolute *when*)
309 should not exceed one day. This has been fixed in Python 3.8.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100310
Victor Stinner3e09e322013-12-03 01:22:06 +0100311.. seealso::
312
313 The :func:`asyncio.sleep` function.
314
Victor Stinnerea3183f2013-12-03 01:08:00 +0100315
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700316Creating Futures and Tasks
317^^^^^^^^^^^^^^^^^^^^^^^^^^
Yury Selivanov950204d2016-05-16 16:23:00 -0400318
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700319.. method:: loop.create_future()
Yury Selivanov950204d2016-05-16 16:23:00 -0400320
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700321 Create an :class:`asyncio.Future` object attached to the event loop.
Yury Selivanov950204d2016-05-16 16:23:00 -0400322
Carol Willing5b7cbd62018-09-12 17:05:17 -0700323 This is the preferred way to create Futures in asyncio. This lets
324 third-party event loops provide alternative implementations of
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700325 the Future object (with better performance or instrumentation).
Yury Selivanov950204d2016-05-16 16:23:00 -0400326
327 .. versionadded:: 3.5.2
328
Andre Delfinodcc997c2020-12-16 22:37:28 -0300329.. method:: loop.create_task(coro, *, name=None)
Yury Selivanov950204d2016-05-16 16:23:00 -0400330
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700331 Schedule the execution of a :ref:`coroutine`.
332 Return a :class:`Task` object.
Victor Stinner530ef2f2014-07-08 12:39:10 +0200333
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700334 Third-party event loops can use their own subclass of :class:`Task`
335 for interoperability. In this case, the result type is a subclass
336 of :class:`Task`.
Victor Stinner530ef2f2014-07-08 12:39:10 +0200337
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700338 If the *name* argument is provided and not ``None``, it is set as
339 the name of the task using :meth:`Task.set_name`.
Victor Stinner530ef2f2014-07-08 12:39:10 +0200340
Alex Grönholmcca4eec2018-08-09 00:06:47 +0300341 .. versionchanged:: 3.8
342 Added the ``name`` parameter.
343
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700344.. method:: loop.set_task_factory(factory)
Yury Selivanov71854612015-05-11 16:28:27 -0400345
346 Set a task factory that will be used by
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700347 :meth:`loop.create_task`.
Yury Selivanov71854612015-05-11 16:28:27 -0400348
349 If *factory* is ``None`` the default task factory will be set.
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400350 Otherwise, *factory* must be a *callable* with the signature matching
351 ``(loop, coro)``, where *loop* is a reference to the active
352 event loop, and *coro* is a coroutine object. The callable
353 must return a :class:`asyncio.Future`-compatible object.
Yury Selivanov71854612015-05-11 16:28:27 -0400354
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700355.. method:: loop.get_task_factory()
Yury Selivanov71854612015-05-11 16:28:27 -0400356
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700357 Return a task factory or ``None`` if the default one is in use.
Yury Selivanov71854612015-05-11 16:28:27 -0400358
Victor Stinner530ef2f2014-07-08 12:39:10 +0200359
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700360Opening network connections
361^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +0100362
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700363.. coroutinemethod:: loop.create_connection(protocol_factory, \
Andre Delfinodcc997c2020-12-16 22:37:28 -0300364 host=None, port=None, *, ssl=None, \
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700365 family=0, proto=0, flags=0, sock=None, \
366 local_addr=None, server_hostname=None, \
idomic5305cc92020-02-10 04:48:40 -0500367 ssl_handshake_timeout=None, \
368 happy_eyeballs_delay=None, interleave=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100369
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700370 Open a streaming transport connection to a given
371 address specified by *host* and *port*.
372
373 The socket family can be either :py:data:`~socket.AF_INET` or
374 :py:data:`~socket.AF_INET6` depending on *host* (or the *family*
375 argument, if provided).
376
377 The socket type will be :py:data:`~socket.SOCK_STREAM`.
378
379 *protocol_factory* must be a callable returning an
380 :ref:`asyncio protocol <asyncio-protocol>` implementation.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100381
Yury Selivanov19a44f62017-12-14 20:53:26 -0500382 This method will try to establish the connection in the background.
383 When successful, it returns a ``(transport, protocol)`` pair.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100384
385 The chronological synopsis of the underlying operation is as follows:
386
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700387 #. The connection is established and a :ref:`transport <asyncio-transport>`
388 is created for it.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100389
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700390 #. *protocol_factory* is called without arguments and is expected to
391 return a :ref:`protocol <asyncio-protocol>` instance.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100392
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700393 #. The protocol instance is coupled with the transport by calling its
394 :meth:`~BaseProtocol.connection_made` method.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100395
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700396 #. A ``(transport, protocol)`` tuple is returned on success.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100397
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700398 The created transport is an implementation-dependent bidirectional
399 stream.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100400
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700401 Other arguments:
Victor Stinnerea3183f2013-12-03 01:08:00 +0100402
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400403 * *ssl*: if given and not false, a SSL/TLS transport is created
Victor Stinnerea3183f2013-12-03 01:08:00 +0100404 (by default a plain TCP transport is created). If *ssl* is
405 a :class:`ssl.SSLContext` object, this context is used to create
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400406 the transport; if *ssl* is :const:`True`, a default context returned
407 from :func:`ssl.create_default_context` is used.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100408
Berker Peksag9c1dba22014-09-28 00:00:58 +0300409 .. seealso:: :ref:`SSL/TLS security considerations <ssl-security>`
Antoine Pitrouc5e075f2014-03-22 18:19:11 +0100410
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400411 * *server_hostname* sets or overrides the hostname that the target
412 server's certificate will be matched against. Should only be passed
413 if *ssl* is not ``None``. By default the value of the *host* argument
Victor Stinnerea3183f2013-12-03 01:08:00 +0100414 is used. If *host* is empty, there is no default and you must pass a
415 value for *server_hostname*. If *server_hostname* is an empty
416 string, hostname matching is disabled (which is a serious security
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400417 risk, allowing for potential man-in-the-middle attacks).
Victor Stinnerea3183f2013-12-03 01:08:00 +0100418
419 * *family*, *proto*, *flags* are the optional address family, protocol
420 and flags to be passed through to getaddrinfo() for *host* resolution.
421 If given, these should all be integers from the corresponding
422 :mod:`socket` module constants.
423
twisteroid ambassador88f07a82019-05-05 19:14:35 +0800424 * *happy_eyeballs_delay*, if given, enables Happy Eyeballs for this
425 connection. It should
426 be a floating-point number representing the amount of time in seconds
427 to wait for a connection attempt to complete, before starting the next
428 attempt in parallel. This is the "Connection Attempt Delay" as defined
429 in :rfc:`8305`. A sensible default value recommended by the RFC is ``0.25``
430 (250 milliseconds).
431
432 * *interleave* controls address reordering when a host name resolves to
433 multiple IP addresses.
434 If ``0`` or unspecified, no reordering is done, and addresses are
435 tried in the order returned by :meth:`getaddrinfo`. If a positive integer
436 is specified, the addresses are interleaved by address family, and the
437 given integer is interpreted as "First Address Family Count" as defined
438 in :rfc:`8305`. The default is ``0`` if *happy_eyeballs_delay* is not
439 specified, and ``1`` if it is.
440
Victor Stinnerea3183f2013-12-03 01:08:00 +0100441 * *sock*, if given, should be an existing, already connected
442 :class:`socket.socket` object to be used by the transport.
twisteroid ambassador88f07a82019-05-05 19:14:35 +0800443 If *sock* is given, none of *host*, *port*, *family*, *proto*, *flags*,
444 *happy_eyeballs_delay*, *interleave*
Victor Stinnerea3183f2013-12-03 01:08:00 +0100445 and *local_addr* should be specified.
446
447 * *local_addr*, if given, is a ``(local_host, local_port)`` tuple used
448 to bind the socket to locally. The *local_host* and *local_port*
Carol Willing5b7cbd62018-09-12 17:05:17 -0700449 are looked up using ``getaddrinfo()``, similarly to *host* and *port*.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100450
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400451 * *ssl_handshake_timeout* is (for a TLS connection) the time in seconds
452 to wait for the TLS handshake to complete before aborting the connection.
Yury Selivanov96026432018-06-04 11:32:35 -0400453 ``60.0`` seconds if ``None`` (default).
Neil Aspinallf7686c12017-12-19 19:45:42 +0000454
twisteroid ambassador88f07a82019-05-05 19:14:35 +0800455 .. versionadded:: 3.8
456
idomic5305cc92020-02-10 04:48:40 -0500457 Added the *happy_eyeballs_delay* and *interleave* parameters.
twisteroid ambassador88f07a82019-05-05 19:14:35 +0800458
idomic8af47122020-02-24 09:59:40 -0500459 Happy Eyeballs Algorithm: Success with Dual-Stack Hosts.
460 When a server's IPv4 path and protocol are working, but the server's
461 IPv6 path and protocol are not working, a dual-stack client
462 application experiences significant connection delay compared to an
463 IPv4-only client. This is undesirable because it causes the dual-
464 stack client to have a worse user experience. This document
465 specifies requirements for algorithms that reduce this user-visible
466 delay and provides an algorithm.
467
468 For more information: https://tools.ietf.org/html/rfc6555
469
Neil Aspinallf7686c12017-12-19 19:45:42 +0000470 .. versionadded:: 3.7
471
472 The *ssl_handshake_timeout* parameter.
473
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700474 .. versionchanged:: 3.6
475
476 The socket option :py:data:`~socket.TCP_NODELAY` is set by default
477 for all TCP connections.
478
Victor Stinner60208a12015-09-15 22:41:52 +0200479 .. versionchanged:: 3.5
480
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400481 Added support for SSL/TLS in :class:`ProactorEventLoop`.
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200482
Victor Stinnerc8ea8132014-01-23 11:02:09 +0100483 .. seealso::
484
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700485 The :func:`open_connection` function is a high-level alternative
486 API. It returns a pair of (:class:`StreamReader`, :class:`StreamWriter`)
487 that can be used directly in async/await code.
Victor Stinnerc8ea8132014-01-23 11:02:09 +0100488
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700489.. coroutinemethod:: loop.create_datagram_endpoint(protocol_factory, \
Andre Delfinodcc997c2020-12-16 22:37:28 -0300490 local_addr=None, remote_addr=None, *, \
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700491 family=0, proto=0, flags=0, \
492 reuse_address=None, reuse_port=None, \
493 allow_broadcast=None, sock=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100494
Kyle Stanleyab513a32019-12-09 09:21:10 -0500495 .. note::
496 The parameter *reuse_address* is no longer supported, as using
497 :py:data:`~sockets.SO_REUSEADDR` poses a significant security concern for
498 UDP. Explicitly passing ``reuse_address=True`` will raise an exception.
499
500 When multiple processes with differing UIDs assign sockets to an
Jesús Ceab0d49492019-12-20 03:21:03 +0100501 identical UDP socket address with ``SO_REUSEADDR``, incoming packets can
Kyle Stanleyab513a32019-12-09 09:21:10 -0500502 become randomly distributed among the sockets.
503
504 For supported platforms, *reuse_port* can be used as a replacement for
505 similar functionality. With *reuse_port*,
506 :py:data:`~sockets.SO_REUSEPORT` is used instead, which specifically
507 prevents processes with differing UIDs from assigning sockets to the same
508 socket address.
509
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700510 Create a datagram connection.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100511
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700512 The socket family can be either :py:data:`~socket.AF_INET`,
513 :py:data:`~socket.AF_INET6`, or :py:data:`~socket.AF_UNIX`,
514 depending on *host* (or the *family* argument, if provided).
Victor Stinnera6919aa2014-02-19 13:32:34 +0100515
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700516 The socket type will be :py:data:`~socket.SOCK_DGRAM`.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100517
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700518 *protocol_factory* must be a callable returning a
519 :ref:`protocol <asyncio-protocol>` implementation.
520
521 A tuple of ``(transport, protocol)`` is returned on success.
522
523 Other arguments:
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700524
525 * *local_addr*, if given, is a ``(local_host, local_port)`` tuple used
526 to bind the socket to locally. The *local_host* and *local_port*
527 are looked up using :meth:`getaddrinfo`.
528
529 * *remote_addr*, if given, is a ``(remote_host, remote_port)`` tuple used
530 to connect the socket to a remote address. The *remote_host* and
531 *remote_port* are looked up using :meth:`getaddrinfo`.
532
533 * *family*, *proto*, *flags* are the optional address family, protocol
534 and flags to be passed through to :meth:`getaddrinfo` for *host*
535 resolution. If given, these should all be integers from the
536 corresponding :mod:`socket` module constants.
537
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700538 * *reuse_port* tells the kernel to allow this endpoint to be bound to the
539 same port as other existing endpoints are bound to, so long as they all
540 set this flag when being created. This option is not supported on Windows
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400541 and some Unixes. If the :py:data:`~socket.SO_REUSEPORT` constant is not
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700542 defined then this capability is unsupported.
543
544 * *allow_broadcast* tells the kernel to allow this endpoint to send
545 messages to the broadcast address.
546
547 * *sock* can optionally be specified in order to use a preexisting,
548 already connected, :class:`socket.socket` object to be used by the
549 transport. If specified, *local_addr* and *remote_addr* should be omitted
550 (must be :const:`None`).
Victor Stinnera6919aa2014-02-19 13:32:34 +0100551
Victor Stinnerc7edffd2014-10-12 11:24:26 +0200552 See :ref:`UDP echo client protocol <asyncio-udp-echo-client-protocol>` and
553 :ref:`UDP echo server protocol <asyncio-udp-echo-server-protocol>` examples.
554
Romuald Brunet0ded5802018-05-14 18:22:00 +0200555 .. versionchanged:: 3.4.4
556 The *family*, *proto*, *flags*, *reuse_address*, *reuse_port,
557 *allow_broadcast*, and *sock* parameters were added.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100558
Kyle Stanleyab513a32019-12-09 09:21:10 -0500559 .. versionchanged:: 3.8.1
560 The *reuse_address* parameter is no longer supported due to security
561 concerns.
562
Andrew Svetlovbafd4b52019-05-28 12:52:15 +0300563 .. versionchanged:: 3.8
564 Added support for Windows.
565
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700566.. coroutinemethod:: loop.create_unix_connection(protocol_factory, \
Andre Delfinodcc997c2020-12-16 22:37:28 -0300567 path=None, *, ssl=None, sock=None, \
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700568 server_hostname=None, ssl_handshake_timeout=None)
Victor Stinnera6919aa2014-02-19 13:32:34 +0100569
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400570 Create a Unix connection.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100571
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700572 The socket family will be :py:data:`~socket.AF_UNIX`; socket
573 type will be :py:data:`~socket.SOCK_STREAM`.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100574
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700575 A tuple of ``(transport, protocol)`` is returned on success.
Guido van Rossum9e80eeb2016-11-03 14:17:25 -0700576
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400577 *path* is the name of a Unix domain socket and is required,
578 unless a *sock* parameter is specified. Abstract Unix sockets,
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700579 :class:`str`, :class:`bytes`, and :class:`~pathlib.Path` paths are
580 supported.
581
582 See the documentation of the :meth:`loop.create_connection` method
583 for information about arguments to this method.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100584
Cheryl Sabella2d6097d2018-10-12 10:55:20 -0400585 .. availability:: Unix.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100586
Neil Aspinallf7686c12017-12-19 19:45:42 +0000587 .. versionadded:: 3.7
588
589 The *ssl_handshake_timeout* parameter.
590
Yury Selivanov423fd362017-11-20 17:26:28 -0500591 .. versionchanged:: 3.7
592
Elvis Pranskevichusc0d062f2018-06-08 11:36:00 -0400593 The *path* parameter can now be a :term:`path-like object`.
Yury Selivanov423fd362017-11-20 17:26:28 -0500594
Victor Stinnera6919aa2014-02-19 13:32:34 +0100595
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700596Creating network servers
597^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +0100598
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700599.. coroutinemethod:: loop.create_server(protocol_factory, \
Andre Delfinodcc997c2020-12-16 22:37:28 -0300600 host=None, port=None, *, \
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700601 family=socket.AF_UNSPEC, \
602 flags=socket.AI_PASSIVE, \
603 sock=None, backlog=100, ssl=None, \
604 reuse_address=None, reuse_port=None, \
605 ssl_handshake_timeout=None, start_serving=True)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100606
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700607 Create a TCP server (socket type :data:`~socket.SOCK_STREAM`) listening
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400608 on *port* of the *host* address.
Victor Stinner33f6abe2014-10-12 20:36:04 +0200609
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700610 Returns a :class:`Server` object.
Victor Stinner33f6abe2014-10-12 20:36:04 +0200611
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700612 Arguments:
Victor Stinner33f6abe2014-10-12 20:36:04 +0200613
Bumsik Kim5cc583d2018-09-16 19:40:44 -0400614 * *protocol_factory* must be a callable returning a
615 :ref:`protocol <asyncio-protocol>` implementation.
616
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400617 * The *host* parameter can be set to several types which determine where
618 the server would be listening:
619
620 - If *host* is a string, the TCP server is bound to a single network
621 interface specified by *host*.
622
623 - If *host* is a sequence of strings, the TCP server is bound to all
624 network interfaces specified by the sequence.
625
626 - If *host* is an empty string or ``None``, all interfaces are
627 assumed and a list of multiple sockets will be returned (most likely
628 one for IPv4 and another one for IPv6).
Victor Stinner33f6abe2014-10-12 20:36:04 +0200629
630 * *family* can be set to either :data:`socket.AF_INET` or
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700631 :data:`~socket.AF_INET6` to force the socket to use IPv4 or IPv6.
Carol Willing5b7cbd62018-09-12 17:05:17 -0700632 If not set, the *family* will be determined from host name
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700633 (defaults to :data:`~socket.AF_UNSPEC`).
Victor Stinner33f6abe2014-10-12 20:36:04 +0200634
635 * *flags* is a bitmask for :meth:`getaddrinfo`.
636
637 * *sock* can optionally be specified in order to use a preexisting
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400638 socket object. If specified, *host* and *port* must not be specified.
Victor Stinner33f6abe2014-10-12 20:36:04 +0200639
640 * *backlog* is the maximum number of queued connections passed to
641 :meth:`~socket.socket.listen` (defaults to 100).
642
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400643 * *ssl* can be set to an :class:`~ssl.SSLContext` instance to enable
644 TLS over the accepted connections.
Victor Stinner33f6abe2014-10-12 20:36:04 +0200645
646 * *reuse_address* tells the kernel to reuse a local socket in
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700647 ``TIME_WAIT`` state, without waiting for its natural timeout to
Serhiy Storchaka4adf01c2016-10-19 18:30:05 +0300648 expire. If not specified will automatically be set to ``True`` on
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400649 Unix.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100650
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700651 * *reuse_port* tells the kernel to allow this endpoint to be bound to the
652 same port as other existing endpoints are bound to, so long as they all
653 set this flag when being created. This option is not supported on
654 Windows.
655
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400656 * *ssl_handshake_timeout* is (for a TLS server) the time in seconds to wait
657 for the TLS handshake to complete before aborting the connection.
Yury Selivanov96026432018-06-04 11:32:35 -0400658 ``60.0`` seconds if ``None`` (default).
Neil Aspinallf7686c12017-12-19 19:45:42 +0000659
Yury Selivanovc9070d02018-01-25 18:08:09 -0500660 * *start_serving* set to ``True`` (the default) causes the created server
661 to start accepting connections immediately. When set to ``False``,
662 the user should await on :meth:`Server.start_serving` or
663 :meth:`Server.serve_forever` to make the server to start accepting
664 connections.
665
Neil Aspinallf7686c12017-12-19 19:45:42 +0000666 .. versionadded:: 3.7
667
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700668 Added *ssl_handshake_timeout* and *start_serving* parameters.
669
670 .. versionchanged:: 3.6
671
672 The socket option :py:data:`~socket.TCP_NODELAY` is set by default
673 for all TCP connections.
Neil Aspinallf7686c12017-12-19 19:45:42 +0000674
Victor Stinner60208a12015-09-15 22:41:52 +0200675 .. versionchanged:: 3.5
676
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400677 Added support for SSL/TLS in :class:`ProactorEventLoop`.
Victor Stinnerc8ea8132014-01-23 11:02:09 +0100678
Victor Stinner7b58a2b2015-09-21 18:41:05 +0200679 .. versionchanged:: 3.5.1
Victor Stinner5e4a7d82015-09-21 18:33:43 +0200680
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700681 The *host* parameter can be a sequence of strings.
682
683 .. seealso::
684
685 The :func:`start_server` function is a higher-level alternative API
686 that returns a pair of :class:`StreamReader` and :class:`StreamWriter`
687 that can be used in an async/await code.
Victor Stinner5e4a7d82015-09-21 18:33:43 +0200688
Victor Stinnerea3183f2013-12-03 01:08:00 +0100689
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700690.. coroutinemethod:: loop.create_unix_server(protocol_factory, path=None, \
Andre Delfinodcc997c2020-12-16 22:37:28 -0300691 *, sock=None, backlog=100, ssl=None, \
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700692 ssl_handshake_timeout=None, start_serving=True)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100693
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700694 Similar to :meth:`loop.create_server` but works with the
695 :py:data:`~socket.AF_UNIX` socket family.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100696
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400697 *path* is the name of a Unix domain socket, and is required,
698 unless a *sock* argument is provided. Abstract Unix sockets,
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700699 :class:`str`, :class:`bytes`, and :class:`~pathlib.Path` paths
700 are supported.
Yury Selivanov423fd362017-11-20 17:26:28 -0500701
Bumsik Kim5cc583d2018-09-16 19:40:44 -0400702 See the documentation of the :meth:`loop.create_server` method
703 for information about arguments to this method.
704
Cheryl Sabella2d6097d2018-10-12 10:55:20 -0400705 .. availability:: Unix.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100706
Neil Aspinallf7686c12017-12-19 19:45:42 +0000707 .. versionadded:: 3.7
708
Elvis Pranskevichusc0d062f2018-06-08 11:36:00 -0400709 The *ssl_handshake_timeout* and *start_serving* parameters.
Neil Aspinallf7686c12017-12-19 19:45:42 +0000710
Yury Selivanov423fd362017-11-20 17:26:28 -0500711 .. versionchanged:: 3.7
712
713 The *path* parameter can now be a :class:`~pathlib.Path` object.
714
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700715.. coroutinemethod:: loop.connect_accepted_socket(protocol_factory, \
Andre Delfinodcc997c2020-12-16 22:37:28 -0300716 sock, *, ssl=None, ssl_handshake_timeout=None)
Yury Selivanov3b3a1412016-11-07 15:35:25 -0500717
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700718 Wrap an already accepted connection into a transport/protocol pair.
Yury Selivanov3b3a1412016-11-07 15:35:25 -0500719
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700720 This method can be used by servers that accept connections outside
721 of asyncio but that use asyncio to handle them.
Yury Selivanov3b3a1412016-11-07 15:35:25 -0500722
723 Parameters:
724
Bumsik Kim5cc583d2018-09-16 19:40:44 -0400725 * *protocol_factory* must be a callable returning a
726 :ref:`protocol <asyncio-protocol>` implementation.
727
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700728 * *sock* is a preexisting socket object returned from
729 :meth:`socket.accept <socket.socket.accept>`.
Yury Selivanov3b3a1412016-11-07 15:35:25 -0500730
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700731 * *ssl* can be set to an :class:`~ssl.SSLContext` to enable SSL over
732 the accepted connections.
Yury Selivanov3b3a1412016-11-07 15:35:25 -0500733
Neil Aspinallf7686c12017-12-19 19:45:42 +0000734 * *ssl_handshake_timeout* is (for an SSL connection) the time in seconds to
735 wait for the SSL handshake to complete before aborting the connection.
Yury Selivanov96026432018-06-04 11:32:35 -0400736 ``60.0`` seconds if ``None`` (default).
Neil Aspinallf7686c12017-12-19 19:45:42 +0000737
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700738 Returns a ``(transport, protocol)`` pair.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100739
Neil Aspinallf7686c12017-12-19 19:45:42 +0000740 .. versionadded:: 3.7
741
742 The *ssl_handshake_timeout* parameter.
743
AraHaan431665b2017-11-21 11:06:26 -0500744 .. versionadded:: 3.5.3
745
746
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700747Transferring files
748^^^^^^^^^^^^^^^^^^
Andrew Svetlov7c684072018-01-27 21:22:47 +0200749
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700750.. coroutinemethod:: loop.sendfile(transport, file, \
751 offset=0, count=None, *, fallback=True)
Andrew Svetlov7c684072018-01-27 21:22:47 +0200752
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700753 Send a *file* over a *transport*. Return the total number of bytes
754 sent.
Andrew Svetlov7c684072018-01-27 21:22:47 +0200755
756 The method uses high-performance :meth:`os.sendfile` if available.
757
758 *file* must be a regular file object opened in binary mode.
759
760 *offset* tells from where to start reading the file. If specified,
761 *count* is the total number of bytes to transmit as opposed to
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400762 sending the file until EOF is reached. File position is always updated,
763 even when this method raises an error, and
764 :meth:`file.tell() <io.IOBase.tell>` can be used to obtain the actual
765 number of bytes sent.
Andrew Svetlov7c684072018-01-27 21:22:47 +0200766
767 *fallback* set to ``True`` makes asyncio to manually read and send
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700768 the file when the platform does not support the sendfile system call
Andrew Svetlov7c684072018-01-27 21:22:47 +0200769 (e.g. Windows or SSL socket on Unix).
770
771 Raise :exc:`SendfileNotAvailableError` if the system does not support
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400772 the *sendfile* syscall and *fallback* is ``False``.
Andrew Svetlov7c684072018-01-27 21:22:47 +0200773
774 .. versionadded:: 3.7
775
776
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500777TLS Upgrade
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700778^^^^^^^^^^^
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500779
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700780.. coroutinemethod:: loop.start_tls(transport, protocol, \
Andre Delfinodcc997c2020-12-16 22:37:28 -0300781 sslcontext, *, server_side=False, \
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700782 server_hostname=None, ssl_handshake_timeout=None)
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500783
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700784 Upgrade an existing transport-based connection to TLS.
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500785
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700786 Return a new transport instance, that the *protocol* must start using
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500787 immediately after the *await*. The *transport* instance passed to
788 the *start_tls* method should never be used again.
789
790 Parameters:
791
792 * *transport* and *protocol* instances that methods like
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700793 :meth:`~loop.create_server` and
794 :meth:`~loop.create_connection` return.
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500795
796 * *sslcontext*: a configured instance of :class:`~ssl.SSLContext`.
797
798 * *server_side* pass ``True`` when a server-side connection is being
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700799 upgraded (like the one created by :meth:`~loop.create_server`).
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500800
801 * *server_hostname*: sets or overrides the host name that the target
802 server's certificate will be matched against.
803
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400804 * *ssl_handshake_timeout* is (for a TLS connection) the time in seconds to
805 wait for the TLS handshake to complete before aborting the connection.
Yury Selivanov96026432018-06-04 11:32:35 -0400806 ``60.0`` seconds if ``None`` (default).
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500807
808 .. versionadded:: 3.7
809
810
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700811Watching file descriptors
812^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerc1567df2014-02-08 23:22:58 +0100813
Andre Delfinodcc997c2020-12-16 22:37:28 -0300814.. method:: loop.add_reader(fd, callback, *args)
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200815
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400816 Start monitoring the *fd* file descriptor for read availability and
817 invoke *callback* with the specified arguments once *fd* is available for
818 reading.
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200819
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700820.. method:: loop.remove_reader(fd)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100821
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400822 Stop monitoring the *fd* file descriptor for read availability.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100823
Andre Delfinodcc997c2020-12-16 22:37:28 -0300824.. method:: loop.add_writer(fd, callback, *args)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100825
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400826 Start monitoring the *fd* file descriptor for write availability and
827 invoke *callback* with the specified arguments once *fd* is available for
828 writing.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100829
Yury Selivanove247b462018-09-20 12:43:59 -0400830 Use :func:`functools.partial` :ref:`to pass keyword arguments
Naglis17473342018-12-04 09:31:15 +0200831 <asyncio-pass-keywords>` to *callback*.
Victor Stinner8464c242014-11-28 13:15:41 +0100832
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700833.. method:: loop.remove_writer(fd)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100834
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400835 Stop monitoring the *fd* file descriptor for write availability.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100836
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700837See also :ref:`Platform Support <asyncio-platform-support>` section
838for some limitations of these methods.
Victor Stinner04e6df32014-10-11 16:16:27 +0200839
Victor Stinnerc1567df2014-02-08 23:22:58 +0100840
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700841Working with socket objects directly
842^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerc1567df2014-02-08 23:22:58 +0100843
Carol Willing5b7cbd62018-09-12 17:05:17 -0700844In general, protocol implementations that use transport-based APIs
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700845such as :meth:`loop.create_connection` and :meth:`loop.create_server`
846are faster than implementations that work with sockets directly.
Carol Willing5b7cbd62018-09-12 17:05:17 -0700847However, there are some use cases when performance is not critical, and
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700848working with :class:`~socket.socket` objects directly is more
849convenient.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100850
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700851.. coroutinemethod:: loop.sock_recv(sock, nbytes)
Yury Selivanov55c50842016-06-08 12:48:15 -0400852
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400853 Receive up to *nbytes* from *sock*. Asynchronous version of
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700854 :meth:`socket.recv() <socket.socket.recv>`.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100855
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400856 Return the received data as a bytes object.
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700857
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400858 *sock* must be a non-blocking socket.
Victor Stinnerec2ce092014-07-29 23:12:22 +0200859
Yury Selivanov19a44f62017-12-14 20:53:26 -0500860 .. versionchanged:: 3.7
Carol Willing5b7cbd62018-09-12 17:05:17 -0700861 Even though this method was always documented as a coroutine
862 method, releases before Python 3.7 returned a :class:`Future`.
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700863 Since Python 3.7 this is an ``async def`` method.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100864
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700865.. coroutinemethod:: loop.sock_recv_into(sock, buf)
Antoine Pitrou525f40d2017-10-19 21:46:40 +0200866
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400867 Receive data from *sock* into the *buf* buffer. Modeled after the blocking
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700868 :meth:`socket.recv_into() <socket.socket.recv_into>` method.
Antoine Pitrou525f40d2017-10-19 21:46:40 +0200869
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700870 Return the number of bytes written to the buffer.
Antoine Pitrou525f40d2017-10-19 21:46:40 +0200871
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400872 *sock* must be a non-blocking socket.
Antoine Pitrou525f40d2017-10-19 21:46:40 +0200873
Antoine Pitrou525f40d2017-10-19 21:46:40 +0200874 .. versionadded:: 3.7
875
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700876.. coroutinemethod:: loop.sock_sendall(sock, data)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100877
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400878 Send *data* to the *sock* socket. Asynchronous version of
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700879 :meth:`socket.sendall() <socket.socket.sendall>`.
Yury Selivanov55c50842016-06-08 12:48:15 -0400880
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400881 This method continues to send to the socket until either all data
882 in *data* has been sent or an error occurs. ``None`` is returned
Carol Willing5b7cbd62018-09-12 17:05:17 -0700883 on success. On error, an exception is raised. Additionally, there is no way
884 to determine how much data, if any, was successfully processed by the
885 receiving end of the connection.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100886
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400887 *sock* must be a non-blocking socket.
Victor Stinnerec2ce092014-07-29 23:12:22 +0200888
Yury Selivanov19a44f62017-12-14 20:53:26 -0500889 .. versionchanged:: 3.7
890 Even though the method was always documented as a coroutine
891 method, before Python 3.7 it returned an :class:`Future`.
892 Since Python 3.7, this is an ``async def`` method.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100893
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700894.. coroutinemethod:: loop.sock_connect(sock, address)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100895
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400896 Connect *sock* to a remote socket at *address*.
Victor Stinner1b0580b2014-02-13 09:24:37 +0100897
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700898 Asynchronous version of :meth:`socket.connect() <socket.socket.connect>`.
899
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400900 *sock* must be a non-blocking socket.
Victor Stinnerec2ce092014-07-29 23:12:22 +0200901
Yury Selivanov55c50842016-06-08 12:48:15 -0400902 .. versionchanged:: 3.5.2
903 ``address`` no longer needs to be resolved. ``sock_connect``
904 will try to check if the *address* is already resolved by calling
905 :func:`socket.inet_pton`. If not,
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700906 :meth:`loop.getaddrinfo` will be used to resolve the
Yury Selivanov55c50842016-06-08 12:48:15 -0400907 *address*.
908
Victor Stinnerc1567df2014-02-08 23:22:58 +0100909 .. seealso::
910
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700911 :meth:`loop.create_connection`
Yury Selivanov55c50842016-06-08 12:48:15 -0400912 and :func:`asyncio.open_connection() <open_connection>`.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100913
914
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700915.. coroutinemethod:: loop.sock_accept(sock)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100916
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700917 Accept a connection. Modeled after the blocking
918 :meth:`socket.accept() <socket.socket.accept>` method.
Yury Selivanov55c50842016-06-08 12:48:15 -0400919
920 The socket must be bound to an address and listening
Victor Stinnerc1567df2014-02-08 23:22:58 +0100921 for connections. The return value is a pair ``(conn, address)`` where *conn*
922 is a *new* socket object usable to send and receive data on the connection,
923 and *address* is the address bound to the socket on the other end of the
924 connection.
925
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400926 *sock* must be a non-blocking socket.
Victor Stinnerec2ce092014-07-29 23:12:22 +0200927
Yury Selivanov19a44f62017-12-14 20:53:26 -0500928 .. versionchanged:: 3.7
929 Even though the method was always documented as a coroutine
930 method, before Python 3.7 it returned a :class:`Future`.
931 Since Python 3.7, this is an ``async def`` method.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100932
933 .. seealso::
934
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700935 :meth:`loop.create_server` and :func:`start_server`.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100936
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700937.. coroutinemethod:: loop.sock_sendfile(sock, file, offset=0, count=None, \
Andre Delfinodcc997c2020-12-16 22:37:28 -0300938 *, fallback=True)
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200939
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700940 Send a file using high-performance :mod:`os.sendfile` if possible.
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400941 Return the total number of bytes sent.
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200942
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700943 Asynchronous version of :meth:`socket.sendfile() <socket.socket.sendfile>`.
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200944
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400945 *sock* must be a non-blocking :const:`socket.SOCK_STREAM`
946 :class:`~socket.socket`.
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200947
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400948 *file* must be a regular file object open in binary mode.
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200949
950 *offset* tells from where to start reading the file. If specified,
951 *count* is the total number of bytes to transmit as opposed to
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400952 sending the file until EOF is reached. File position is always updated,
953 even when this method raises an error, and
954 :meth:`file.tell() <io.IOBase.tell>` can be used to obtain the actual
955 number of bytes sent.
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200956
Carol Willing5b7cbd62018-09-12 17:05:17 -0700957 *fallback*, when set to ``True``, makes asyncio manually read and send
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200958 the file when the platform does not support the sendfile syscall
959 (e.g. Windows or SSL socket on Unix).
960
Andrew Svetlov7464e872018-01-19 20:04:29 +0200961 Raise :exc:`SendfileNotAvailableError` if the system does not support
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200962 *sendfile* syscall and *fallback* is ``False``.
963
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400964 *sock* must be a non-blocking socket.
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700965
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200966 .. versionadded:: 3.7
967
Victor Stinnerc1567df2014-02-08 23:22:58 +0100968
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700969DNS
970^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +0100971
Andre Delfinodcc997c2020-12-16 22:37:28 -0300972.. coroutinemethod:: loop.getaddrinfo(host, port, *, family=0, \
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700973 type=0, proto=0, flags=0)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100974
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700975 Asynchronous version of :meth:`socket.getaddrinfo`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100976
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700977.. coroutinemethod:: loop.getnameinfo(sockaddr, flags=0)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100978
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700979 Asynchronous version of :meth:`socket.getnameinfo`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100980
Yury Selivanovbec23722018-01-28 14:09:40 -0500981.. versionchanged:: 3.7
982 Both *getaddrinfo* and *getnameinfo* methods were always documented
983 to return a coroutine, but prior to Python 3.7 they were, in fact,
984 returning :class:`asyncio.Future` objects. Starting with Python 3.7
985 both methods are coroutines.
986
Victor Stinnerea3183f2013-12-03 01:08:00 +0100987
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700988Working with pipes
989^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +0100990
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700991.. coroutinemethod:: loop.connect_read_pipe(protocol_factory, pipe)
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200992
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400993 Register the read end of *pipe* in the event loop.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100994
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700995 *protocol_factory* must be a callable returning an
996 :ref:`asyncio protocol <asyncio-protocol>` implementation.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100997
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700998 *pipe* is a :term:`file-like object <file object>`.
999
1000 Return pair ``(transport, protocol)``, where *transport* supports
Bumsik Kim5cc583d2018-09-16 19:40:44 -04001001 the :class:`ReadTransport` interface and *protocol* is an object
1002 instantiated by the *protocol_factory*.
Victor Stinnerea3183f2013-12-03 01:08:00 +01001003
Victor Stinnerd84fd732014-08-26 01:01:59 +02001004 With :class:`SelectorEventLoop` event loop, the *pipe* is set to
1005 non-blocking mode.
1006
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001007.. coroutinemethod:: loop.connect_write_pipe(protocol_factory, pipe)
Victor Stinnerea3183f2013-12-03 01:08:00 +01001008
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001009 Register the write end of *pipe* in the event loop.
Victor Stinnerea3183f2013-12-03 01:08:00 +01001010
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001011 *protocol_factory* must be a callable returning an
1012 :ref:`asyncio protocol <asyncio-protocol>` implementation.
1013
1014 *pipe* is :term:`file-like object <file object>`.
1015
Victor Stinner2cef3002014-10-23 22:38:46 +02001016 Return pair ``(transport, protocol)``, where *transport* supports
Bumsik Kim5cc583d2018-09-16 19:40:44 -04001017 :class:`WriteTransport` interface and *protocol* is an object
1018 instantiated by the *protocol_factory*.
Victor Stinnerea3183f2013-12-03 01:08:00 +01001019
Victor Stinnerd84fd732014-08-26 01:01:59 +02001020 With :class:`SelectorEventLoop` event loop, the *pipe* is set to
1021 non-blocking mode.
1022
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001023.. note::
1024
1025 :class:`SelectorEventLoop` does not support the above methods on
Carol Willing5b7cbd62018-09-12 17:05:17 -07001026 Windows. Use :class:`ProactorEventLoop` instead for Windows.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001027
Victor Stinner08444382014-02-02 22:43:39 +01001028.. seealso::
1029
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001030 The :meth:`loop.subprocess_exec` and
1031 :meth:`loop.subprocess_shell` methods.
Victor Stinner08444382014-02-02 22:43:39 +01001032
Victor Stinnerea3183f2013-12-03 01:08:00 +01001033
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001034Unix signals
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001035^^^^^^^^^^^^
Victor Stinner8b863482014-01-27 10:07:50 +01001036
Andre Delfinodcc997c2020-12-16 22:37:28 -03001037.. method:: loop.add_signal_handler(signum, callback, *args)
Victor Stinner8b863482014-01-27 10:07:50 +01001038
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001039 Set *callback* as the handler for the *signum* signal.
Victor Stinner8b863482014-01-27 10:07:50 +01001040
Hrvoje Nikšiće3666fc2018-12-18 22:31:29 +01001041 The callback will be invoked by *loop*, along with other queued callbacks
1042 and runnable coroutines of that event loop. Unlike signal handlers
1043 registered using :func:`signal.signal`, a callback registered with this
1044 function is allowed to interact with the event loop.
1045
Victor Stinner8b863482014-01-27 10:07:50 +01001046 Raise :exc:`ValueError` if the signal number is invalid or uncatchable.
1047 Raise :exc:`RuntimeError` if there is a problem setting up the handler.
1048
Yury Selivanove247b462018-09-20 12:43:59 -04001049 Use :func:`functools.partial` :ref:`to pass keyword arguments
Naglis17473342018-12-04 09:31:15 +02001050 <asyncio-pass-keywords>` to *callback*.
Victor Stinner8464c242014-11-28 13:15:41 +01001051
Hrvoje Nikšiće3666fc2018-12-18 22:31:29 +01001052 Like :func:`signal.signal`, this function must be invoked in the main
1053 thread.
1054
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001055.. method:: loop.remove_signal_handler(sig)
Victor Stinner8b863482014-01-27 10:07:50 +01001056
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001057 Remove the handler for the *sig* signal.
Victor Stinner8b863482014-01-27 10:07:50 +01001058
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001059 Return ``True`` if the signal handler was removed, or ``False`` if
1060 no handler was set for the given signal.
Victor Stinner8b863482014-01-27 10:07:50 +01001061
Cheryl Sabella2d6097d2018-10-12 10:55:20 -04001062 .. availability:: Unix.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001063
Victor Stinner8b863482014-01-27 10:07:50 +01001064.. seealso::
1065
1066 The :mod:`signal` module.
1067
1068
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001069Executing code in thread or process pools
1070^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +01001071
Andre Delfinodcc997c2020-12-16 22:37:28 -03001072.. awaitablemethod:: loop.run_in_executor(executor, func, *args)
Victor Stinnerea3183f2013-12-03 01:08:00 +01001073
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001074 Arrange for *func* to be called in the specified executor.
Victor Stinnerea3183f2013-12-03 01:08:00 +01001075
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001076 The *executor* argument should be an :class:`concurrent.futures.Executor`
Larry Hastings3732ed22014-03-15 21:13:56 -07001077 instance. The default executor is used if *executor* is ``None``.
Victor Stinnerea3183f2013-12-03 01:08:00 +01001078
Yury Selivanove247b462018-09-20 12:43:59 -04001079 Example::
1080
1081 import asyncio
1082 import concurrent.futures
1083
1084 def blocking_io():
1085 # File operations (such as logging) can block the
1086 # event loop: run them in a thread pool.
1087 with open('/dev/urandom', 'rb') as f:
1088 return f.read(100)
1089
1090 def cpu_bound():
1091 # CPU-bound operations will block the event loop:
1092 # in general it is preferable to run them in a
1093 # process pool.
1094 return sum(i * i for i in range(10 ** 7))
1095
1096 async def main():
1097 loop = asyncio.get_running_loop()
1098
1099 ## Options:
1100
1101 # 1. Run in the default loop's executor:
1102 result = await loop.run_in_executor(
1103 None, blocking_io)
1104 print('default thread pool', result)
1105
1106 # 2. Run in a custom thread pool:
1107 with concurrent.futures.ThreadPoolExecutor() as pool:
1108 result = await loop.run_in_executor(
1109 pool, blocking_io)
1110 print('custom thread pool', result)
1111
1112 # 3. Run in a custom process pool:
1113 with concurrent.futures.ProcessPoolExecutor() as pool:
1114 result = await loop.run_in_executor(
1115 pool, cpu_bound)
1116 print('custom process pool', result)
1117
1118 asyncio.run(main())
Victor Stinner8464c242014-11-28 13:15:41 +01001119
Yury Selivanovbec23722018-01-28 14:09:40 -05001120 This method returns a :class:`asyncio.Future` object.
1121
Yury Selivanove247b462018-09-20 12:43:59 -04001122 Use :func:`functools.partial` :ref:`to pass keyword arguments
1123 <asyncio-pass-keywords>` to *func*.
1124
Yury Selivanove8a60452016-10-21 17:40:42 -04001125 .. versionchanged:: 3.5.3
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001126 :meth:`loop.run_in_executor` no longer configures the
Yury Selivanove8a60452016-10-21 17:40:42 -04001127 ``max_workers`` of the thread pool executor it creates, instead
1128 leaving it up to the thread pool executor
1129 (:class:`~concurrent.futures.ThreadPoolExecutor`) to set the
1130 default.
1131
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001132.. method:: loop.set_default_executor(executor)
Victor Stinnerea3183f2013-12-03 01:08:00 +01001133
Elvis Pranskevichus22d25082018-07-30 11:42:43 +01001134 Set *executor* as the default executor used by :meth:`run_in_executor`.
1135 *executor* should be an instance of
1136 :class:`~concurrent.futures.ThreadPoolExecutor`.
1137
1138 .. deprecated:: 3.8
1139 Using an executor that is not an instance of
1140 :class:`~concurrent.futures.ThreadPoolExecutor` is deprecated and
1141 will trigger an error in Python 3.9.
Victor Stinnerea3183f2013-12-03 01:08:00 +01001142
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001143 *executor* must be an instance of
1144 :class:`concurrent.futures.ThreadPoolExecutor`.
1145
Victor Stinnerea3183f2013-12-03 01:08:00 +01001146
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001147Error Handling API
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001148^^^^^^^^^^^^^^^^^^
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001149
Martin Panterc04fb562016-02-10 05:44:01 +00001150Allows customizing how exceptions are handled in the event loop.
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001151
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001152.. method:: loop.set_exception_handler(handler)
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001153
1154 Set *handler* as the new event loop exception handler.
1155
1156 If *handler* is ``None``, the default exception handler will
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001157 be set. Otherwise, *handler* must be a callable with the signature
1158 matching ``(loop, context)``, where ``loop``
1159 is a reference to the active event loop, and ``context``
1160 is a ``dict`` object containing the details of the exception
1161 (see :meth:`call_exception_handler` documentation for details
1162 about context).
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001163
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001164.. method:: loop.get_exception_handler()
Yury Selivanov950204d2016-05-16 16:23:00 -04001165
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001166 Return the current exception handler, or ``None`` if no custom
1167 exception handler was set.
Yury Selivanov950204d2016-05-16 16:23:00 -04001168
1169 .. versionadded:: 3.5.2
1170
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001171.. method:: loop.default_exception_handler(context)
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001172
1173 Default exception handler.
1174
1175 This is called when an exception occurs and no exception
Carol Willing5b7cbd62018-09-12 17:05:17 -07001176 handler is set. This can be called by a custom exception
1177 handler that wants to defer to the default handler behavior.
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001178
1179 *context* parameter has the same meaning as in
1180 :meth:`call_exception_handler`.
1181
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001182.. method:: loop.call_exception_handler(context)
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001183
1184 Call the current event loop exception handler.
1185
1186 *context* is a ``dict`` object containing the following keys
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001187 (new keys may be introduced in future Python versions):
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001188
1189 * 'message': Error message;
1190 * 'exception' (optional): Exception object;
1191 * 'future' (optional): :class:`asyncio.Future` instance;
Shane Harveya1652da2020-11-26 05:24:48 -08001192 * 'task' (optional): :class:`asyncio.Task` instance;
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001193 * 'handle' (optional): :class:`asyncio.Handle` instance;
1194 * 'protocol' (optional): :ref:`Protocol <asyncio-protocol>` instance;
1195 * 'transport' (optional): :ref:`Transport <asyncio-transport>` instance;
Shane Harveya1652da2020-11-26 05:24:48 -08001196 * 'socket' (optional): :class:`socket.socket` instance;
1197 * 'asyncgen' (optional): Asynchronous generator that caused
1198 the exception.
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001199
1200 .. note::
1201
Carol Willing5b7cbd62018-09-12 17:05:17 -07001202 This method should not be overloaded in subclassed
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001203 event loops. For custom exception handling, use
1204 the :meth:`set_exception_handler()` method.
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001205
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001206Enabling debug mode
1207^^^^^^^^^^^^^^^^^^^
Victor Stinner0f3e6bc2014-02-19 23:15:02 +01001208
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001209.. method:: loop.get_debug()
Victor Stinner0f3e6bc2014-02-19 23:15:02 +01001210
Victor Stinner7b7120e2014-06-23 00:12:14 +02001211 Get the debug mode (:class:`bool`) of the event loop.
1212
1213 The default value is ``True`` if the environment variable
1214 :envvar:`PYTHONASYNCIODEBUG` is set to a non-empty string, ``False``
1215 otherwise.
Victor Stinner0f3e6bc2014-02-19 23:15:02 +01001216
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001217.. method:: loop.set_debug(enabled: bool)
Victor Stinner0f3e6bc2014-02-19 23:15:02 +01001218
1219 Set the debug mode of the event loop.
1220
Yury Selivanov805e27e2018-09-14 16:57:11 -07001221 .. versionchanged:: 3.7
1222
Victor Stinnerb9783d22020-01-24 10:22:18 +01001223 The new :ref:`Python Development Mode <devmode>` can now also be used
Yury Selivanov805e27e2018-09-14 16:57:11 -07001224 to enable the debug mode.
1225
Victor Stinner0f3e6bc2014-02-19 23:15:02 +01001226.. seealso::
1227
Victor Stinner62511fd2014-06-23 00:36:11 +02001228 The :ref:`debug mode of asyncio <asyncio-debug-mode>`.
Victor Stinner0f3e6bc2014-02-19 23:15:02 +01001229
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001230
1231Running Subprocesses
1232^^^^^^^^^^^^^^^^^^^^
1233
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001234Methods described in this subsections are low-level. In regular
1235async/await code consider using the high-level
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001236:func:`asyncio.create_subprocess_shell` and
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001237:func:`asyncio.create_subprocess_exec` convenience functions instead.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001238
1239.. note::
1240
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001241 The default asyncio event loop on **Windows** does not support
1242 subprocesses. See :ref:`Subprocess Support on Windows
1243 <asyncio-windows-subprocess>` for details.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001244
Andre Delfinodcc997c2020-12-16 22:37:28 -03001245.. coroutinemethod:: loop.subprocess_exec(protocol_factory, *args, \
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001246 stdin=subprocess.PIPE, stdout=subprocess.PIPE, \
Andre Delfinodcc997c2020-12-16 22:37:28 -03001247 stderr=subprocess.PIPE, **kwargs)
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001248
1249 Create a subprocess from one or more string arguments specified by
1250 *args*.
1251
1252 *args* must be a list of strings represented by:
1253
1254 * :class:`str`;
1255 * or :class:`bytes`, encoded to the
1256 :ref:`filesystem encoding <filesystem-encoding>`.
1257
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001258 The first string specifies the program executable,
Carol Willing5b7cbd62018-09-12 17:05:17 -07001259 and the remaining strings specify the arguments. Together, string
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001260 arguments form the ``argv`` of the program.
1261
1262 This is similar to the standard library :class:`subprocess.Popen`
1263 class called with ``shell=False`` and the list of strings passed as
1264 the first argument; however, where :class:`~subprocess.Popen` takes
1265 a single argument which is list of strings, *subprocess_exec*
1266 takes multiple string arguments.
1267
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001268 The *protocol_factory* must be a callable returning a subclass of the
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001269 :class:`asyncio.SubprocessProtocol` class.
1270
1271 Other parameters:
1272
sbstpf0d4c642019-05-27 19:51:19 -04001273 * *stdin* can be any of these:
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001274
sbstpf0d4c642019-05-27 19:51:19 -04001275 * a file-like object representing a pipe to be connected to the
1276 subprocess's standard input stream using
1277 :meth:`~loop.connect_write_pipe`
1278 * the :const:`subprocess.PIPE` constant (default) which will create a new
1279 pipe and connect it,
1280 * the value ``None`` which will make the subprocess inherit the file
1281 descriptor from this process
1282 * the :const:`subprocess.DEVNULL` constant which indicates that the
1283 special :data:`os.devnull` file will be used
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001284
sbstpf0d4c642019-05-27 19:51:19 -04001285 * *stdout* can be any of these:
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001286
sbstpf0d4c642019-05-27 19:51:19 -04001287 * a file-like object representing a pipe to be connected to the
1288 subprocess's standard output stream using
1289 :meth:`~loop.connect_write_pipe`
1290 * the :const:`subprocess.PIPE` constant (default) which will create a new
1291 pipe and connect it,
1292 * the value ``None`` which will make the subprocess inherit the file
1293 descriptor from this process
1294 * the :const:`subprocess.DEVNULL` constant which indicates that the
1295 special :data:`os.devnull` file will be used
1296
1297 * *stderr* can be any of these:
1298
1299 * a file-like object representing a pipe to be connected to the
1300 subprocess's standard error stream using
1301 :meth:`~loop.connect_write_pipe`
1302 * the :const:`subprocess.PIPE` constant (default) which will create a new
1303 pipe and connect it,
1304 * the value ``None`` which will make the subprocess inherit the file
1305 descriptor from this process
1306 * the :const:`subprocess.DEVNULL` constant which indicates that the
1307 special :data:`os.devnull` file will be used
1308 * the :const:`subprocess.STDOUT` constant which will connect the standard
1309 error stream to the process' standard output stream
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001310
1311 * All other keyword arguments are passed to :class:`subprocess.Popen`
sbstpf0d4c642019-05-27 19:51:19 -04001312 without interpretation, except for *bufsize*, *universal_newlines*,
1313 *shell*, *text*, *encoding* and *errors*, which should not be specified
1314 at all.
1315
1316 The ``asyncio`` subprocess API does not support decoding the streams
1317 as text. :func:`bytes.decode` can be used to convert the bytes returned
1318 from the stream to text.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001319
1320 See the constructor of the :class:`subprocess.Popen` class
1321 for documentation on other arguments.
1322
1323 Returns a pair of ``(transport, protocol)``, where *transport*
Bumsik Kim5cc583d2018-09-16 19:40:44 -04001324 conforms to the :class:`asyncio.SubprocessTransport` base class and
1325 *protocol* is an object instantiated by the *protocol_factory*.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001326
Andre Delfinodcc997c2020-12-16 22:37:28 -03001327.. coroutinemethod:: loop.subprocess_shell(protocol_factory, cmd, *, \
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001328 stdin=subprocess.PIPE, stdout=subprocess.PIPE, \
Andre Delfinodcc997c2020-12-16 22:37:28 -03001329 stderr=subprocess.PIPE, **kwargs)
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001330
1331 Create a subprocess from *cmd*, which can be a :class:`str` or a
1332 :class:`bytes` string encoded to the
1333 :ref:`filesystem encoding <filesystem-encoding>`,
1334 using the platform's "shell" syntax.
1335
1336 This is similar to the standard library :class:`subprocess.Popen`
1337 class called with ``shell=True``.
1338
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001339 The *protocol_factory* must be a callable returning a subclass of the
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001340 :class:`SubprocessProtocol` class.
1341
1342 See :meth:`~loop.subprocess_exec` for more details about
1343 the remaining arguments.
1344
1345 Returns a pair of ``(transport, protocol)``, where *transport*
Bumsik Kim5cc583d2018-09-16 19:40:44 -04001346 conforms to the :class:`SubprocessTransport` base class and
1347 *protocol* is an object instantiated by the *protocol_factory*.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001348
1349.. note::
1350 It is the application's responsibility to ensure that all whitespace
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001351 and special characters are quoted appropriately to avoid `shell injection
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001352 <https://en.wikipedia.org/wiki/Shell_injection#Shell_injection>`_
1353 vulnerabilities. The :func:`shlex.quote` function can be used to
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001354 properly escape whitespace and special characters in strings that
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001355 are going to be used to construct shell commands.
1356
1357
1358Callback Handles
1359================
1360
1361.. class:: Handle
1362
1363 A callback wrapper object returned by :meth:`loop.call_soon`,
1364 :meth:`loop.call_soon_threadsafe`.
1365
1366 .. method:: cancel()
1367
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001368 Cancel the callback. If the callback has already been canceled
1369 or executed, this method has no effect.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001370
1371 .. method:: cancelled()
1372
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001373 Return ``True`` if the callback was cancelled.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001374
1375 .. versionadded:: 3.7
1376
1377.. class:: TimerHandle
1378
1379 A callback wrapper object returned by :meth:`loop.call_later`,
1380 and :meth:`loop.call_at`.
1381
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001382 This class is a subclass of :class:`Handle`.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001383
1384 .. method:: when()
1385
1386 Return a scheduled callback time as :class:`float` seconds.
1387
1388 The time is an absolute timestamp, using the same time
1389 reference as :meth:`loop.time`.
1390
1391 .. versionadded:: 3.7
1392
1393
1394Server Objects
1395==============
1396
1397Server objects are created by :meth:`loop.create_server`,
1398:meth:`loop.create_unix_server`, :func:`start_server`,
1399and :func:`start_unix_server` functions.
1400
1401Do not instantiate the class directly.
Victor Stinner8c462c52014-01-24 18:11:43 +01001402
Victor Stinner8ebeb032014-07-11 23:47:40 +02001403.. class:: Server
Victor Stinner8c462c52014-01-24 18:11:43 +01001404
Yury Selivanovc9070d02018-01-25 18:08:09 -05001405 *Server* objects are asynchronous context managers. When used in an
1406 ``async with`` statement, it's guaranteed that the Server object is
1407 closed and not accepting new connections when the ``async with``
1408 statement is completed::
1409
1410 srv = await loop.create_server(...)
1411
1412 async with srv:
1413 # some code
1414
Carol Willing5b7cbd62018-09-12 17:05:17 -07001415 # At this point, srv is closed and no longer accepts new connections.
Yury Selivanovc9070d02018-01-25 18:08:09 -05001416
1417
1418 .. versionchanged:: 3.7
1419 Server object is an asynchronous context manager since Python 3.7.
Victor Stinner8c462c52014-01-24 18:11:43 +01001420
1421 .. method:: close()
1422
Victor Stinner4bfb14a2014-07-12 03:20:24 +02001423 Stop serving: close listening sockets and set the :attr:`sockets`
1424 attribute to ``None``.
1425
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001426 The sockets that represent existing incoming client connections
1427 are left open.
Victor Stinner8ebeb032014-07-11 23:47:40 +02001428
Berker Peksag49c9edf2016-01-20 07:14:22 +02001429 The server is closed asynchronously, use the :meth:`wait_closed`
1430 coroutine to wait until the server is closed.
Victor Stinner8c462c52014-01-24 18:11:43 +01001431
Srinivas Reddy Thatiparthy (శ్రీనివాస్ రెడ్డి తాటిపర్తి)1634fc22017-12-30 20:39:32 +05301432 .. method:: get_loop()
1433
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001434 Return the event loop associated with the server object.
Srinivas Reddy Thatiparthy (శ్రీనివాస్ రెడ్డి తాటిపర్తి)1634fc22017-12-30 20:39:32 +05301435
1436 .. versionadded:: 3.7
1437
Yury Selivanovc9070d02018-01-25 18:08:09 -05001438 .. coroutinemethod:: start_serving()
1439
1440 Start accepting connections.
1441
1442 This method is idempotent, so it can be called when
1443 the server is already being serving.
1444
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001445 The *start_serving* keyword-only parameter to
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001446 :meth:`loop.create_server` and
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001447 :meth:`asyncio.start_server` allows creating a Server object
1448 that is not accepting connections initially. In this case
1449 ``Server.start_serving()``, or :meth:`Server.serve_forever` can be used
1450 to make the Server start accepting connections.
Yury Selivanovc9070d02018-01-25 18:08:09 -05001451
1452 .. versionadded:: 3.7
1453
1454 .. coroutinemethod:: serve_forever()
1455
1456 Start accepting connections until the coroutine is cancelled.
1457 Cancellation of ``serve_forever`` task causes the server
1458 to be closed.
1459
1460 This method can be called if the server is already accepting
1461 connections. Only one ``serve_forever`` task can exist per
1462 one *Server* object.
1463
1464 Example::
1465
1466 async def client_connected(reader, writer):
1467 # Communicate with the client with
1468 # reader/writer streams. For example:
1469 await reader.readline()
1470
1471 async def main(host, port):
1472 srv = await asyncio.start_server(
1473 client_connected, host, port)
Andrew Svetlov17ab8f02018-02-17 19:44:35 +02001474 await srv.serve_forever()
Yury Selivanovc9070d02018-01-25 18:08:09 -05001475
1476 asyncio.run(main('127.0.0.1', 0))
1477
1478 .. versionadded:: 3.7
1479
1480 .. method:: is_serving()
1481
1482 Return ``True`` if the server is accepting new connections.
1483
1484 .. versionadded:: 3.7
1485
Victor Stinnerbdd574d2015-02-12 22:49:18 +01001486 .. coroutinemethod:: wait_closed()
Victor Stinner8c462c52014-01-24 18:11:43 +01001487
Victor Stinner8ebeb032014-07-11 23:47:40 +02001488 Wait until the :meth:`close` method completes.
1489
Victor Stinner8ebeb032014-07-11 23:47:40 +02001490 .. attribute:: sockets
1491
Emmanuel Ariasdf5cdc12019-02-22 14:34:41 -03001492 List of :class:`socket.socket` objects the server is listening on.
Victor Stinner8c462c52014-01-24 18:11:43 +01001493
Yury Selivanovc9070d02018-01-25 18:08:09 -05001494 .. versionchanged:: 3.7
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001495 Prior to Python 3.7 ``Server.sockets`` used to return an
1496 internal list of server sockets directly. In 3.7 a copy
Yury Selivanovc9070d02018-01-25 18:08:09 -05001497 of that list is returned.
1498
Victor Stinner8c462c52014-01-24 18:11:43 +01001499
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001500.. _asyncio-event-loops:
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001501
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001502Event Loop Implementations
1503==========================
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001504
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001505asyncio ships with two different event loop implementations:
1506:class:`SelectorEventLoop` and :class:`ProactorEventLoop`.
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001507
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001508By default asyncio is configured to use :class:`SelectorEventLoop`
Ben Darnell9ffca672019-06-22 13:38:21 -04001509on Unix and :class:`ProactorEventLoop` on Windows.
Andrew Svetlov3d4dbd82018-02-01 19:59:32 +02001510
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001511
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001512.. class:: SelectorEventLoop
1513
1514 An event loop based on the :mod:`selectors` module.
1515
1516 Uses the most efficient *selector* available for the given
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001517 platform. It is also possible to manually configure the
1518 exact selector implementation to be used::
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001519
1520 import asyncio
1521 import selectors
1522
1523 selector = selectors.SelectSelector()
1524 loop = asyncio.SelectorEventLoop(selector)
1525 asyncio.set_event_loop(loop)
Andrew Svetlov7464e872018-01-19 20:04:29 +02001526
1527
Cheryl Sabella2d6097d2018-10-12 10:55:20 -04001528 .. availability:: Unix, Windows.
Andrew Svetlov7464e872018-01-19 20:04:29 +02001529
1530
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001531.. class:: ProactorEventLoop
1532
1533 An event loop for Windows that uses "I/O Completion Ports" (IOCP).
1534
Cheryl Sabella2d6097d2018-10-12 10:55:20 -04001535 .. availability:: Windows.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001536
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001537 .. seealso::
1538
1539 `MSDN documentation on I/O Completion Ports
1540 <https://docs.microsoft.com/en-ca/windows/desktop/FileIO/i-o-completion-ports>`_.
1541
1542
1543.. class:: AbstractEventLoop
1544
1545 Abstract base class for asyncio-compliant event loops.
1546
1547 The :ref:`Event Loop Methods <asyncio-event-loop>` section lists all
1548 methods that an alternative implementation of ``AbstractEventLoop``
1549 should have defined.
1550
1551
1552Examples
1553========
1554
1555Note that all examples in this section **purposefully** show how
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001556to use the low-level event loop APIs, such as :meth:`loop.run_forever`
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001557and :meth:`loop.call_soon`. Modern asyncio applications rarely
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001558need to be written this way; consider using the high-level functions
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001559like :func:`asyncio.run`.
1560
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001561
Yury Selivanov394374e2018-09-17 15:35:24 -04001562.. _asyncio_example_lowlevel_helloworld:
Victor Stinnerea3183f2013-12-03 01:08:00 +01001563
Victor Stinner7f314ed2014-10-15 18:49:16 +02001564Hello World with call_soon()
Victor Stinnera092a612015-01-09 15:58:41 +01001565^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +01001566
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001567An example using the :meth:`loop.call_soon` method to schedule a
1568callback. The callback displays ``"Hello World"`` and then stops the
1569event loop::
Victor Stinnerea3183f2013-12-03 01:08:00 +01001570
1571 import asyncio
1572
Victor Stinner7f314ed2014-10-15 18:49:16 +02001573 def hello_world(loop):
Carol Willing5b7cbd62018-09-12 17:05:17 -07001574 """A callback to print 'Hello World' and stop the event loop"""
Victor Stinnerea3183f2013-12-03 01:08:00 +01001575 print('Hello World')
Victor Stinner7f314ed2014-10-15 18:49:16 +02001576 loop.stop()
Victor Stinnerea3183f2013-12-03 01:08:00 +01001577
1578 loop = asyncio.get_event_loop()
Victor Stinner7f314ed2014-10-15 18:49:16 +02001579
1580 # Schedule a call to hello_world()
1581 loop.call_soon(hello_world, loop)
1582
1583 # Blocking call interrupted by loop.stop()
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001584 try:
1585 loop.run_forever()
1586 finally:
1587 loop.close()
Victor Stinnerea3183f2013-12-03 01:08:00 +01001588
Victor Stinner3e09e322013-12-03 01:22:06 +01001589.. seealso::
Victor Stinnerea3183f2013-12-03 01:08:00 +01001590
Yury Selivanov3faaa882018-09-14 13:32:07 -07001591 A similar :ref:`Hello World <coroutine>`
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001592 example created with a coroutine and the :func:`run` function.
Victor Stinnerea3183f2013-12-03 01:08:00 +01001593
Victor Stinner8b863482014-01-27 10:07:50 +01001594
Yury Selivanov394374e2018-09-17 15:35:24 -04001595.. _asyncio_example_call_later:
Victor Stinner7f314ed2014-10-15 18:49:16 +02001596
1597Display the current date with call_later()
Victor Stinnera092a612015-01-09 15:58:41 +01001598^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinner7f314ed2014-10-15 18:49:16 +02001599
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001600An example of a callback displaying the current date every second. The
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001601callback uses the :meth:`loop.call_later` method to reschedule itself
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001602after 5 seconds, and then stops the event loop::
Victor Stinner7f314ed2014-10-15 18:49:16 +02001603
1604 import asyncio
1605 import datetime
1606
1607 def display_date(end_time, loop):
1608 print(datetime.datetime.now())
1609 if (loop.time() + 1.0) < end_time:
1610 loop.call_later(1, display_date, end_time, loop)
1611 else:
1612 loop.stop()
1613
1614 loop = asyncio.get_event_loop()
1615
1616 # Schedule the first call to display_date()
1617 end_time = loop.time() + 5.0
1618 loop.call_soon(display_date, end_time, loop)
1619
1620 # Blocking call interrupted by loop.stop()
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001621 try:
1622 loop.run_forever()
1623 finally:
1624 loop.close()
Victor Stinner7f314ed2014-10-15 18:49:16 +02001625
1626.. seealso::
1627
Yury Selivanov7372c3b2018-09-14 15:11:24 -07001628 A similar :ref:`current date <asyncio_example_sleep>` example
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001629 created with a coroutine and the :func:`run` function.
Victor Stinner7f314ed2014-10-15 18:49:16 +02001630
1631
Yury Selivanov394374e2018-09-17 15:35:24 -04001632.. _asyncio_example_watch_fd:
Victor Stinner8b863482014-01-27 10:07:50 +01001633
Victor Stinner04e6df32014-10-11 16:16:27 +02001634Watch a file descriptor for read events
Victor Stinnera092a612015-01-09 15:58:41 +01001635^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinner04e6df32014-10-11 16:16:27 +02001636
1637Wait until a file descriptor received some data using the
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001638:meth:`loop.add_reader` method and then close the event loop::
Victor Stinner04e6df32014-10-11 16:16:27 +02001639
1640 import asyncio
Victor Stinnerac577d72017-11-28 21:33:20 +01001641 from socket import socketpair
Victor Stinner04e6df32014-10-11 16:16:27 +02001642
1643 # Create a pair of connected file descriptors
Victor Stinnerccd8e342014-10-11 16:30:02 +02001644 rsock, wsock = socketpair()
Carol Willing5b7cbd62018-09-12 17:05:17 -07001645
Victor Stinner04e6df32014-10-11 16:16:27 +02001646 loop = asyncio.get_event_loop()
1647
1648 def reader():
1649 data = rsock.recv(100)
1650 print("Received:", data.decode())
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001651
Victor Stinner2cef3002014-10-23 22:38:46 +02001652 # We are done: unregister the file descriptor
Victor Stinner04e6df32014-10-11 16:16:27 +02001653 loop.remove_reader(rsock)
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001654
Victor Stinner04e6df32014-10-11 16:16:27 +02001655 # Stop the event loop
1656 loop.stop()
1657
Victor Stinner2cef3002014-10-23 22:38:46 +02001658 # Register the file descriptor for read event
Victor Stinner04e6df32014-10-11 16:16:27 +02001659 loop.add_reader(rsock, reader)
1660
1661 # Simulate the reception of data from the network
1662 loop.call_soon(wsock.send, 'abc'.encode())
1663
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001664 try:
1665 # Run the event loop
1666 loop.run_forever()
1667 finally:
Carol Willing5b7cbd62018-09-12 17:05:17 -07001668 # We are done. Close sockets and the event loop.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001669 rsock.close()
1670 wsock.close()
1671 loop.close()
Victor Stinner04e6df32014-10-11 16:16:27 +02001672
1673.. seealso::
1674
Yury Selivanov394374e2018-09-17 15:35:24 -04001675 * A similar :ref:`example <asyncio_example_create_connection>`
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001676 using transports, protocols, and the
1677 :meth:`loop.create_connection` method.
Victor Stinner04e6df32014-10-11 16:16:27 +02001678
Yury Selivanov394374e2018-09-17 15:35:24 -04001679 * Another similar :ref:`example <asyncio_example_create_connection-streams>`
Yury Selivanov6758e6e2019-09-29 21:59:55 -07001680 using the high-level :func:`asyncio.open_connection` function
1681 and streams.
Victor Stinner04e6df32014-10-11 16:16:27 +02001682
1683
Yury Selivanov394374e2018-09-17 15:35:24 -04001684.. _asyncio_example_unix_signals:
1685
Victor Stinner04e6df32014-10-11 16:16:27 +02001686Set signal handlers for SIGINT and SIGTERM
Victor Stinnera092a612015-01-09 15:58:41 +01001687^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinner04e6df32014-10-11 16:16:27 +02001688
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001689(This ``signals`` example only works on Unix.)
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001690
1691Register handlers for signals :py:data:`SIGINT` and :py:data:`SIGTERM`
1692using the :meth:`loop.add_signal_handler` method::
Victor Stinner8b863482014-01-27 10:07:50 +01001693
1694 import asyncio
1695 import functools
1696 import os
1697 import signal
1698
Alexander Vasinceb842e2019-05-03 18:25:36 +03001699 def ask_exit(signame, loop):
Victor Stinner8b863482014-01-27 10:07:50 +01001700 print("got signal %s: exit" % signame)
1701 loop.stop()
1702
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001703 async def main():
1704 loop = asyncio.get_running_loop()
Victor Stinner8b863482014-01-27 10:07:50 +01001705
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001706 for signame in {'SIGINT', 'SIGTERM'}:
1707 loop.add_signal_handler(
1708 getattr(signal, signame),
Alexander Vasinceb842e2019-05-03 18:25:36 +03001709 functools.partial(ask_exit, signame, loop))
Victor Stinner2cef3002014-10-23 22:38:46 +02001710
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001711 await asyncio.sleep(3600)
1712
1713 print("Event loop running for 1 hour, press Ctrl+C to interrupt.")
1714 print(f"pid {os.getpid()}: send SIGINT or SIGTERM to exit.")
1715
1716 asyncio.run(main())