blob: acf9477f723d4422d9e0edd58edcfae0f8d2cd5d [file] [log] [blame]
R David Murray6a143812013-12-20 14:37:39 -05001.. currentmodule:: asyncio
Victor Stinnerea3183f2013-12-03 01:08:00 +01002
Yury Selivanov7c7605f2018-09-11 09:54:40 -07003
4==========
5Event Loop
6==========
7
8
9.. rubric:: Preface
10
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -040011The event loop is the core of every asyncio application.
Yury Selivanov7c7605f2018-09-11 09:54:40 -070012Event loops run asynchronous tasks and callbacks, perform network
Carol Willing5b7cbd62018-09-12 17:05:17 -070013IO operations, and run subprocesses.
Yury Selivanov7c7605f2018-09-11 09:54:40 -070014
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -040015Application developers should typically use the high-level asyncio functions,
16such as :func:`asyncio.run`, and should rarely need to reference the loop
17object or call its methods. This section is intended mostly for authors
18of lower-level code, libraries, and frameworks, who need finer control over
19the event loop behavior.
Yury Selivanov7c7605f2018-09-11 09:54:40 -070020
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -040021.. rubric:: Obtaining the Event Loop
Yury Selivanov7c7605f2018-09-11 09:54:40 -070022
23The following low-level functions can be used to get, set, or create
24an event loop:
25
26.. function:: get_running_loop()
27
28 Return the running event loop in the current OS thread.
29
30 If there is no running event loop a :exc:`RuntimeError` is raised.
31 This function can only be called from a coroutine or a callback.
32
33 .. versionadded:: 3.7
34
35.. function:: get_event_loop()
36
37 Get the current event loop. If there is no current event loop set
38 in the current OS thread and :func:`set_event_loop` has not yet
39 been called, asyncio will create a new event loop and set it as the
40 current one.
41
Carol Willing5b7cbd62018-09-12 17:05:17 -070042 Because this function has rather complex behavior (especially
43 when custom event loop policies are in use), using the
44 :func:`get_running_loop` function is preferred to :func:`get_event_loop`
45 in coroutines and callbacks.
Yury Selivanov7c7605f2018-09-11 09:54:40 -070046
Carol Willing5b7cbd62018-09-12 17:05:17 -070047 Consider also using the :func:`asyncio.run` function instead of using
48 lower level functions to manually create and close an event loop.
Yury Selivanov7c7605f2018-09-11 09:54:40 -070049
50.. function:: set_event_loop(loop)
51
52 Set *loop* as a current event loop for the current OS thread.
53
54.. function:: new_event_loop()
55
56 Create a new event loop object.
57
58Note that the behaviour of :func:`get_event_loop`, :func:`set_event_loop`,
59and :func:`new_event_loop` functions can be altered by
60:ref:`setting a custom event loop policy <asyncio-policies>`.
61
62
63.. rubric:: Contents
64
65This documentation page contains the following sections:
66
Carol Willing5b7cbd62018-09-12 17:05:17 -070067* The `Event Loop Methods`_ section is the reference documentation of
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -040068 the event loop APIs;
Yury Selivanov7c7605f2018-09-11 09:54:40 -070069
70* The `Callback Handles`_ section documents the :class:`Handle` and
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -040071 :class:`TimerHandle` instances which are returned from scheduling
72 methods such as :meth:`loop.call_soon` and :meth:`loop.call_later`;
Yury Selivanov7c7605f2018-09-11 09:54:40 -070073
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -040074* The `Server Objects`_ section documents types returned from
Yury Selivanov7c7605f2018-09-11 09:54:40 -070075 event loop methods like :meth:`loop.create_server`;
76
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -040077* The `Event Loop Implementations`_ section documents the
Yury Selivanov7c7605f2018-09-11 09:54:40 -070078 :class:`SelectorEventLoop` and :class:`ProactorEventLoop` classes;
79
80* The `Examples`_ section showcases how to work with some event
81 loop APIs.
82
83
Victor Stinner9592edb2014-02-02 15:03:02 +010084.. _asyncio-event-loop:
Victor Stinnerea3183f2013-12-03 01:08:00 +010085
Yury Selivanov7c7605f2018-09-11 09:54:40 -070086Event Loop Methods
87==================
Victor Stinnerea3183f2013-12-03 01:08:00 +010088
Carol Willing5b7cbd62018-09-12 17:05:17 -070089Event loops have **low-level** APIs for the following:
lf627d2c82017-07-25 17:03:51 -060090
Yury Selivanov7c7605f2018-09-11 09:54:40 -070091.. contents::
92 :depth: 1
93 :local:
Victor Stinnerea3183f2013-12-03 01:08:00 +010094
Victor Stinnerea3183f2013-12-03 01:08:00 +010095
Yury Selivanov7c7605f2018-09-11 09:54:40 -070096Running and stopping the loop
97^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +010098
Yury Selivanov7c7605f2018-09-11 09:54:40 -070099.. method:: loop.run_until_complete(future)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100100
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400101 Run until the *future* (an instance of :class:`Future`) has
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700102 completed.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100103
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700104 If the argument is a :ref:`coroutine object <coroutine>` it
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400105 is implicitly scheduled to run as a :class:`asyncio.Task`.
Eli Bendersky136fea22014-02-09 06:55:58 -0800106
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700107 Return the Future's result or raise its exception.
Guido van Rossumf68afd82016-08-08 09:41:21 -0700108
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700109.. method:: loop.run_forever()
Guido van Rossumf68afd82016-08-08 09:41:21 -0700110
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700111 Run the event loop until :meth:`stop` is called.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100112
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700113 If :meth:`stop` is called before :meth:`run_forever()` is called,
114 the loop will poll the I/O selector once with a timeout of zero,
115 run all callbacks scheduled in response to I/O events (and
116 those that were already scheduled), and then exit.
Victor Stinner83704962015-02-25 14:24:15 +0100117
Guido van Rossum41f69f42015-11-19 13:28:47 -0800118 If :meth:`stop` is called while :meth:`run_forever` is running,
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700119 the loop will run the current batch of callbacks and then exit.
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400120 Note that new callbacks scheduled by callbacks will not run in this
Carol Willing5b7cbd62018-09-12 17:05:17 -0700121 case; instead, they will run the next time :meth:`run_forever` or
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700122 :meth:`run_until_complete` is called.
Guido van Rossum41f69f42015-11-19 13:28:47 -0800123
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700124.. method:: loop.stop()
Victor Stinnerea3183f2013-12-03 01:08:00 +0100125
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700126 Stop the event loop.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100127
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700128.. method:: loop.is_running()
Victor Stinnerea3183f2013-12-03 01:08:00 +0100129
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700130 Return ``True`` if the event loop is currently running.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100131
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700132.. method:: loop.is_closed()
Victor Stinnerea3183f2013-12-03 01:08:00 +0100133
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700134 Return ``True`` if the event loop was closed.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100135
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700136.. method:: loop.close()
Victor Stinnerea3183f2013-12-03 01:08:00 +0100137
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700138 Close the event loop.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100139
Andriy Maletskyb83d9172018-10-29 23:39:21 +0200140 The loop must not be running when this function is called.
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700141 Any pending callbacks will be discarded.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100142
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700143 This method clears all queues and shuts down the executor, but does
144 not wait for the executor to finish.
Guido van Rossum41f69f42015-11-19 13:28:47 -0800145
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700146 This method is idempotent and irreversible. No other methods
147 should be called after the event loop is closed.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100148
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700149.. coroutinemethod:: loop.shutdown_asyncgens()
Yury Selivanov03660042016-12-15 17:36:05 -0500150
151 Schedule all currently open :term:`asynchronous generator` objects to
152 close with an :meth:`~agen.aclose()` call. After calling this method,
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700153 the event loop will issue a warning if a new asynchronous generator
Carol Willing5b7cbd62018-09-12 17:05:17 -0700154 is iterated. This should be used to reliably finalize all scheduled
Yury Selivanovac94e382018-09-17 23:58:00 -0400155 asynchronous generators.
Carol Willing5b7cbd62018-09-12 17:05:17 -0700156
Yury Selivanovac94e382018-09-17 23:58:00 -0400157 Note that there is no need to call this function when
158 :func:`asyncio.run` is used.
159
160 Example::
Yury Selivanov03660042016-12-15 17:36:05 -0500161
162 try:
163 loop.run_forever()
164 finally:
165 loop.run_until_complete(loop.shutdown_asyncgens())
166 loop.close()
167
168 .. versionadded:: 3.6
169
170
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700171Scheduling callbacks
172^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +0100173
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700174.. method:: loop.call_soon(callback, *args, context=None)
Victor Stinner8464c242014-11-28 13:15:41 +0100175
Carol Willing5b7cbd62018-09-12 17:05:17 -0700176 Schedule a *callback* to be called with *args* arguments at
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700177 the next iteration of the event loop.
Victor Stinner8464c242014-11-28 13:15:41 +0100178
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700179 Callbacks are called in the order in which they are registered.
180 Each callback will be called exactly once.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100181
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700182 An optional keyword-only *context* argument allows specifying a
183 custom :class:`contextvars.Context` for the *callback* to run in.
184 The current context is used when no *context* is provided.
Yury Selivanov28b91782018-05-23 13:35:04 -0400185
Yury Selivanov1096f762015-06-25 13:49:52 -0400186 An instance of :class:`asyncio.Handle` is returned, which can be
Carol Willing5b7cbd62018-09-12 17:05:17 -0700187 used later to cancel the callback.
188
189 This method is not thread-safe.
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500190
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700191.. method:: loop.call_soon_threadsafe(callback, *args, context=None)
Victor Stinner8464c242014-11-28 13:15:41 +0100192
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700193 A thread-safe variant of :meth:`call_soon`. Must be used to
194 schedule callbacks *from another thread*.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100195
Victor Stinner83704962015-02-25 14:24:15 +0100196 See the :ref:`concurrency and multithreading <asyncio-multithreading>`
197 section of the documentation.
198
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700199.. versionchanged:: 3.7
200 The *context* keyword-only parameter was added. See :pep:`567`
201 for more details.
202
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400203.. _asyncio-pass-keywords:
204
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700205.. note::
206
Carol Willing5b7cbd62018-09-12 17:05:17 -0700207 Most :mod:`asyncio` scheduling functions don't allow passing
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400208 keyword arguments. To do that, use :func:`functools.partial`::
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700209
Carol Willing5b7cbd62018-09-12 17:05:17 -0700210 # will schedule "print("Hello", flush=True)"
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700211 loop.call_soon(
212 functools.partial(print, "Hello", flush=True))
213
214 Using partial objects is usually more convenient than using lambdas,
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400215 as asyncio can render partial objects better in debug and error
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700216 messages.
Yury Selivanov28b91782018-05-23 13:35:04 -0400217
Victor Stinnerea3183f2013-12-03 01:08:00 +0100218
Victor Stinner45b27ed2014-02-01 02:36:43 +0100219.. _asyncio-delayed-calls:
220
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700221Scheduling delayed callbacks
222^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +0100223
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700224Event loop provides mechanisms to schedule callback functions
225to be called at some point in the future. Event loop uses monotonic
226clocks to track time.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100227
Victor Stinner45b27ed2014-02-01 02:36:43 +0100228
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700229.. method:: loop.call_later(delay, callback, *args, context=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100230
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700231 Schedule *callback* to be called after the given *delay*
232 number of seconds (can be either an int or a float).
Victor Stinnerea3183f2013-12-03 01:08:00 +0100233
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700234 An instance of :class:`asyncio.TimerHandle` is returned which can
235 be used to cancel the callback.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100236
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700237 *callback* will be called exactly once. If two callbacks are
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400238 scheduled for exactly the same time, the order in which they
239 are called is undefined.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100240
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700241 The optional positional *args* will be passed to the callback when
242 it is called. If you want the callback to be called with keyword
243 arguments use :func:`functools.partial`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100244
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700245 An optional keyword-only *context* argument allows specifying a
246 custom :class:`contextvars.Context` for the *callback* to run in.
247 The current context is used when no *context* is provided.
Victor Stinner8464c242014-11-28 13:15:41 +0100248
Yury Selivanov28b91782018-05-23 13:35:04 -0400249 .. versionchanged:: 3.7
250 The *context* keyword-only parameter was added. See :pep:`567`
251 for more details.
252
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400253 .. versionchanged:: 3.8
254 In Python 3.7 and earlier with the default event loop implementation,
255 the *delay* could not exceed one day.
256 This has been fixed in Python 3.8.
257
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700258.. method:: loop.call_at(when, callback, *args, context=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100259
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700260 Schedule *callback* to be called at the given absolute timestamp
261 *when* (an int or a float), using the same time reference as
262 :meth:`loop.time`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100263
264 This method's behavior is the same as :meth:`call_later`.
265
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700266 An instance of :class:`asyncio.TimerHandle` is returned which can
267 be used to cancel the callback.
Victor Stinner8464c242014-11-28 13:15:41 +0100268
Yury Selivanov28b91782018-05-23 13:35:04 -0400269 .. versionchanged:: 3.7
270 The *context* keyword-only parameter was added. See :pep:`567`
271 for more details.
272
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400273 .. versionchanged:: 3.8
274 In Python 3.7 and earlier with the default event loop implementation,
275 the difference between *when* and the current time could not exceed
276 one day. This has been fixed in Python 3.8.
277
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700278.. method:: loop.time()
Victor Stinnerea3183f2013-12-03 01:08:00 +0100279
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700280 Return the current time, as a :class:`float` value, according to
281 the event loop's internal monotonic clock.
282
283.. note::
284
285 Timeouts (relative *delay* or absolute *when*) should not
286 exceed one day.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100287
Victor Stinner3e09e322013-12-03 01:22:06 +0100288.. seealso::
289
290 The :func:`asyncio.sleep` function.
291
Victor Stinnerea3183f2013-12-03 01:08:00 +0100292
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700293Creating Futures and Tasks
294^^^^^^^^^^^^^^^^^^^^^^^^^^
Yury Selivanov950204d2016-05-16 16:23:00 -0400295
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700296.. method:: loop.create_future()
Yury Selivanov950204d2016-05-16 16:23:00 -0400297
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700298 Create an :class:`asyncio.Future` object attached to the event loop.
Yury Selivanov950204d2016-05-16 16:23:00 -0400299
Carol Willing5b7cbd62018-09-12 17:05:17 -0700300 This is the preferred way to create Futures in asyncio. This lets
301 third-party event loops provide alternative implementations of
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700302 the Future object (with better performance or instrumentation).
Yury Selivanov950204d2016-05-16 16:23:00 -0400303
304 .. versionadded:: 3.5.2
305
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700306.. method:: loop.create_task(coro, \*, name=None)
Yury Selivanov950204d2016-05-16 16:23:00 -0400307
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700308 Schedule the execution of a :ref:`coroutine`.
309 Return a :class:`Task` object.
Victor Stinner530ef2f2014-07-08 12:39:10 +0200310
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700311 Third-party event loops can use their own subclass of :class:`Task`
312 for interoperability. In this case, the result type is a subclass
313 of :class:`Task`.
Victor Stinner530ef2f2014-07-08 12:39:10 +0200314
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700315 If the *name* argument is provided and not ``None``, it is set as
316 the name of the task using :meth:`Task.set_name`.
Victor Stinner530ef2f2014-07-08 12:39:10 +0200317
Alex Grönholmcca4eec2018-08-09 00:06:47 +0300318 .. versionchanged:: 3.8
319 Added the ``name`` parameter.
320
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700321.. method:: loop.set_task_factory(factory)
Yury Selivanov71854612015-05-11 16:28:27 -0400322
323 Set a task factory that will be used by
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700324 :meth:`loop.create_task`.
Yury Selivanov71854612015-05-11 16:28:27 -0400325
326 If *factory* is ``None`` the default task factory will be set.
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400327 Otherwise, *factory* must be a *callable* with the signature matching
328 ``(loop, coro)``, where *loop* is a reference to the active
329 event loop, and *coro* is a coroutine object. The callable
330 must return a :class:`asyncio.Future`-compatible object.
Yury Selivanov71854612015-05-11 16:28:27 -0400331
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700332.. method:: loop.get_task_factory()
Yury Selivanov71854612015-05-11 16:28:27 -0400333
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700334 Return a task factory or ``None`` if the default one is in use.
Yury Selivanov71854612015-05-11 16:28:27 -0400335
Victor Stinner530ef2f2014-07-08 12:39:10 +0200336
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700337Opening network connections
338^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +0100339
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700340.. coroutinemethod:: loop.create_connection(protocol_factory, \
341 host=None, port=None, \*, ssl=None, \
342 family=0, proto=0, flags=0, sock=None, \
343 local_addr=None, server_hostname=None, \
344 ssl_handshake_timeout=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100345
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700346 Open a streaming transport connection to a given
347 address specified by *host* and *port*.
348
349 The socket family can be either :py:data:`~socket.AF_INET` or
350 :py:data:`~socket.AF_INET6` depending on *host* (or the *family*
351 argument, if provided).
352
353 The socket type will be :py:data:`~socket.SOCK_STREAM`.
354
355 *protocol_factory* must be a callable returning an
356 :ref:`asyncio protocol <asyncio-protocol>` implementation.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100357
Yury Selivanov19a44f62017-12-14 20:53:26 -0500358 This method will try to establish the connection in the background.
359 When successful, it returns a ``(transport, protocol)`` pair.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100360
361 The chronological synopsis of the underlying operation is as follows:
362
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700363 #. The connection is established and a :ref:`transport <asyncio-transport>`
364 is created for it.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100365
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700366 #. *protocol_factory* is called without arguments and is expected to
367 return a :ref:`protocol <asyncio-protocol>` instance.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100368
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700369 #. The protocol instance is coupled with the transport by calling its
370 :meth:`~BaseProtocol.connection_made` method.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100371
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700372 #. A ``(transport, protocol)`` tuple is returned on success.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100373
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700374 The created transport is an implementation-dependent bidirectional
375 stream.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100376
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700377 Other arguments:
Victor Stinnerea3183f2013-12-03 01:08:00 +0100378
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400379 * *ssl*: if given and not false, a SSL/TLS transport is created
Victor Stinnerea3183f2013-12-03 01:08:00 +0100380 (by default a plain TCP transport is created). If *ssl* is
381 a :class:`ssl.SSLContext` object, this context is used to create
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400382 the transport; if *ssl* is :const:`True`, a default context returned
383 from :func:`ssl.create_default_context` is used.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100384
Berker Peksag9c1dba22014-09-28 00:00:58 +0300385 .. seealso:: :ref:`SSL/TLS security considerations <ssl-security>`
Antoine Pitrouc5e075f2014-03-22 18:19:11 +0100386
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400387 * *server_hostname* sets or overrides the hostname that the target
388 server's certificate will be matched against. Should only be passed
389 if *ssl* is not ``None``. By default the value of the *host* argument
Victor Stinnerea3183f2013-12-03 01:08:00 +0100390 is used. If *host* is empty, there is no default and you must pass a
391 value for *server_hostname*. If *server_hostname* is an empty
392 string, hostname matching is disabled (which is a serious security
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400393 risk, allowing for potential man-in-the-middle attacks).
Victor Stinnerea3183f2013-12-03 01:08:00 +0100394
395 * *family*, *proto*, *flags* are the optional address family, protocol
396 and flags to be passed through to getaddrinfo() for *host* resolution.
397 If given, these should all be integers from the corresponding
398 :mod:`socket` module constants.
399
400 * *sock*, if given, should be an existing, already connected
401 :class:`socket.socket` object to be used by the transport.
402 If *sock* is given, none of *host*, *port*, *family*, *proto*, *flags*
403 and *local_addr* should be specified.
404
405 * *local_addr*, if given, is a ``(local_host, local_port)`` tuple used
406 to bind the socket to locally. The *local_host* and *local_port*
Carol Willing5b7cbd62018-09-12 17:05:17 -0700407 are looked up using ``getaddrinfo()``, similarly to *host* and *port*.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100408
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400409 * *ssl_handshake_timeout* is (for a TLS connection) the time in seconds
410 to wait for the TLS handshake to complete before aborting the connection.
Yury Selivanov96026432018-06-04 11:32:35 -0400411 ``60.0`` seconds if ``None`` (default).
Neil Aspinallf7686c12017-12-19 19:45:42 +0000412
413 .. versionadded:: 3.7
414
415 The *ssl_handshake_timeout* parameter.
416
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700417 .. versionchanged:: 3.6
418
419 The socket option :py:data:`~socket.TCP_NODELAY` is set by default
420 for all TCP connections.
421
Victor Stinner60208a12015-09-15 22:41:52 +0200422 .. versionchanged:: 3.5
423
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400424 Added support for SSL/TLS in :class:`ProactorEventLoop`.
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200425
Victor Stinnerc8ea8132014-01-23 11:02:09 +0100426 .. seealso::
427
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700428 The :func:`open_connection` function is a high-level alternative
429 API. It returns a pair of (:class:`StreamReader`, :class:`StreamWriter`)
430 that can be used directly in async/await code.
Victor Stinnerc8ea8132014-01-23 11:02:09 +0100431
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700432.. coroutinemethod:: loop.create_datagram_endpoint(protocol_factory, \
433 local_addr=None, remote_addr=None, \*, \
434 family=0, proto=0, flags=0, \
435 reuse_address=None, reuse_port=None, \
436 allow_broadcast=None, sock=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100437
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700438 Create a datagram connection.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100439
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700440 The socket family can be either :py:data:`~socket.AF_INET`,
441 :py:data:`~socket.AF_INET6`, or :py:data:`~socket.AF_UNIX`,
442 depending on *host* (or the *family* argument, if provided).
Victor Stinnera6919aa2014-02-19 13:32:34 +0100443
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700444 The socket type will be :py:data:`~socket.SOCK_DGRAM`.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100445
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700446 *protocol_factory* must be a callable returning a
447 :ref:`protocol <asyncio-protocol>` implementation.
448
449 A tuple of ``(transport, protocol)`` is returned on success.
450
451 Other arguments:
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700452
453 * *local_addr*, if given, is a ``(local_host, local_port)`` tuple used
454 to bind the socket to locally. The *local_host* and *local_port*
455 are looked up using :meth:`getaddrinfo`.
456
457 * *remote_addr*, if given, is a ``(remote_host, remote_port)`` tuple used
458 to connect the socket to a remote address. The *remote_host* and
459 *remote_port* are looked up using :meth:`getaddrinfo`.
460
461 * *family*, *proto*, *flags* are the optional address family, protocol
462 and flags to be passed through to :meth:`getaddrinfo` for *host*
463 resolution. If given, these should all be integers from the
464 corresponding :mod:`socket` module constants.
465
466 * *reuse_address* tells the kernel to reuse a local socket in
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700467 ``TIME_WAIT`` state, without waiting for its natural timeout to
Serhiy Storchaka4adf01c2016-10-19 18:30:05 +0300468 expire. If not specified will automatically be set to ``True`` on
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400469 Unix.
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700470
471 * *reuse_port* tells the kernel to allow this endpoint to be bound to the
472 same port as other existing endpoints are bound to, so long as they all
473 set this flag when being created. This option is not supported on Windows
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400474 and some Unixes. If the :py:data:`~socket.SO_REUSEPORT` constant is not
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700475 defined then this capability is unsupported.
476
477 * *allow_broadcast* tells the kernel to allow this endpoint to send
478 messages to the broadcast address.
479
480 * *sock* can optionally be specified in order to use a preexisting,
481 already connected, :class:`socket.socket` object to be used by the
482 transport. If specified, *local_addr* and *remote_addr* should be omitted
483 (must be :const:`None`).
Victor Stinnera6919aa2014-02-19 13:32:34 +0100484
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400485 On Windows, with :class:`ProactorEventLoop`, this method is not supported.
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200486
Victor Stinnerc7edffd2014-10-12 11:24:26 +0200487 See :ref:`UDP echo client protocol <asyncio-udp-echo-client-protocol>` and
488 :ref:`UDP echo server protocol <asyncio-udp-echo-server-protocol>` examples.
489
Romuald Brunet0ded5802018-05-14 18:22:00 +0200490 .. versionchanged:: 3.4.4
491 The *family*, *proto*, *flags*, *reuse_address*, *reuse_port,
492 *allow_broadcast*, and *sock* parameters were added.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100493
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700494.. coroutinemethod:: loop.create_unix_connection(protocol_factory, \
495 path=None, \*, ssl=None, sock=None, \
496 server_hostname=None, ssl_handshake_timeout=None)
Victor Stinnera6919aa2014-02-19 13:32:34 +0100497
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400498 Create a Unix connection.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100499
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700500 The socket family will be :py:data:`~socket.AF_UNIX`; socket
501 type will be :py:data:`~socket.SOCK_STREAM`.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100502
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700503 A tuple of ``(transport, protocol)`` is returned on success.
Guido van Rossum9e80eeb2016-11-03 14:17:25 -0700504
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400505 *path* is the name of a Unix domain socket and is required,
506 unless a *sock* parameter is specified. Abstract Unix sockets,
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700507 :class:`str`, :class:`bytes`, and :class:`~pathlib.Path` paths are
508 supported.
509
510 See the documentation of the :meth:`loop.create_connection` method
511 for information about arguments to this method.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100512
Cheryl Sabella2d6097d2018-10-12 10:55:20 -0400513 .. availability:: Unix.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100514
Neil Aspinallf7686c12017-12-19 19:45:42 +0000515 .. versionadded:: 3.7
516
517 The *ssl_handshake_timeout* parameter.
518
Yury Selivanov423fd362017-11-20 17:26:28 -0500519 .. versionchanged:: 3.7
520
Elvis Pranskevichusc0d062f2018-06-08 11:36:00 -0400521 The *path* parameter can now be a :term:`path-like object`.
Yury Selivanov423fd362017-11-20 17:26:28 -0500522
Victor Stinnera6919aa2014-02-19 13:32:34 +0100523
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700524Creating network servers
525^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +0100526
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700527.. coroutinemethod:: loop.create_server(protocol_factory, \
528 host=None, port=None, \*, \
529 family=socket.AF_UNSPEC, \
530 flags=socket.AI_PASSIVE, \
531 sock=None, backlog=100, ssl=None, \
532 reuse_address=None, reuse_port=None, \
533 ssl_handshake_timeout=None, start_serving=True)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100534
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700535 Create a TCP server (socket type :data:`~socket.SOCK_STREAM`) listening
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400536 on *port* of the *host* address.
Victor Stinner33f6abe2014-10-12 20:36:04 +0200537
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700538 Returns a :class:`Server` object.
Victor Stinner33f6abe2014-10-12 20:36:04 +0200539
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700540 Arguments:
Victor Stinner33f6abe2014-10-12 20:36:04 +0200541
Bumsik Kim5cc583d2018-09-16 19:40:44 -0400542 * *protocol_factory* must be a callable returning a
543 :ref:`protocol <asyncio-protocol>` implementation.
544
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400545 * The *host* parameter can be set to several types which determine where
546 the server would be listening:
547
548 - If *host* is a string, the TCP server is bound to a single network
549 interface specified by *host*.
550
551 - If *host* is a sequence of strings, the TCP server is bound to all
552 network interfaces specified by the sequence.
553
554 - If *host* is an empty string or ``None``, all interfaces are
555 assumed and a list of multiple sockets will be returned (most likely
556 one for IPv4 and another one for IPv6).
Victor Stinner33f6abe2014-10-12 20:36:04 +0200557
558 * *family* can be set to either :data:`socket.AF_INET` or
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700559 :data:`~socket.AF_INET6` to force the socket to use IPv4 or IPv6.
Carol Willing5b7cbd62018-09-12 17:05:17 -0700560 If not set, the *family* will be determined from host name
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700561 (defaults to :data:`~socket.AF_UNSPEC`).
Victor Stinner33f6abe2014-10-12 20:36:04 +0200562
563 * *flags* is a bitmask for :meth:`getaddrinfo`.
564
565 * *sock* can optionally be specified in order to use a preexisting
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400566 socket object. If specified, *host* and *port* must not be specified.
Victor Stinner33f6abe2014-10-12 20:36:04 +0200567
568 * *backlog* is the maximum number of queued connections passed to
569 :meth:`~socket.socket.listen` (defaults to 100).
570
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400571 * *ssl* can be set to an :class:`~ssl.SSLContext` instance to enable
572 TLS over the accepted connections.
Victor Stinner33f6abe2014-10-12 20:36:04 +0200573
574 * *reuse_address* tells the kernel to reuse a local socket in
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700575 ``TIME_WAIT`` state, without waiting for its natural timeout to
Serhiy Storchaka4adf01c2016-10-19 18:30:05 +0300576 expire. If not specified will automatically be set to ``True`` on
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400577 Unix.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100578
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700579 * *reuse_port* tells the kernel to allow this endpoint to be bound to the
580 same port as other existing endpoints are bound to, so long as they all
581 set this flag when being created. This option is not supported on
582 Windows.
583
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400584 * *ssl_handshake_timeout* is (for a TLS server) the time in seconds to wait
585 for the TLS handshake to complete before aborting the connection.
Yury Selivanov96026432018-06-04 11:32:35 -0400586 ``60.0`` seconds if ``None`` (default).
Neil Aspinallf7686c12017-12-19 19:45:42 +0000587
Yury Selivanovc9070d02018-01-25 18:08:09 -0500588 * *start_serving* set to ``True`` (the default) causes the created server
589 to start accepting connections immediately. When set to ``False``,
590 the user should await on :meth:`Server.start_serving` or
591 :meth:`Server.serve_forever` to make the server to start accepting
592 connections.
593
Neil Aspinallf7686c12017-12-19 19:45:42 +0000594 .. versionadded:: 3.7
595
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700596 Added *ssl_handshake_timeout* and *start_serving* parameters.
597
598 .. versionchanged:: 3.6
599
600 The socket option :py:data:`~socket.TCP_NODELAY` is set by default
601 for all TCP connections.
Neil Aspinallf7686c12017-12-19 19:45:42 +0000602
Victor Stinner60208a12015-09-15 22:41:52 +0200603 .. versionchanged:: 3.5
604
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400605 Added support for SSL/TLS in :class:`ProactorEventLoop`.
Victor Stinnerc8ea8132014-01-23 11:02:09 +0100606
Victor Stinner7b58a2b2015-09-21 18:41:05 +0200607 .. versionchanged:: 3.5.1
Victor Stinner5e4a7d82015-09-21 18:33:43 +0200608
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700609 The *host* parameter can be a sequence of strings.
610
611 .. seealso::
612
613 The :func:`start_server` function is a higher-level alternative API
614 that returns a pair of :class:`StreamReader` and :class:`StreamWriter`
615 that can be used in an async/await code.
Victor Stinner5e4a7d82015-09-21 18:33:43 +0200616
Victor Stinnerea3183f2013-12-03 01:08:00 +0100617
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700618.. coroutinemethod:: loop.create_unix_server(protocol_factory, path=None, \
619 \*, sock=None, backlog=100, ssl=None, \
620 ssl_handshake_timeout=None, start_serving=True)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100621
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700622 Similar to :meth:`loop.create_server` but works with the
623 :py:data:`~socket.AF_UNIX` socket family.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100624
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400625 *path* is the name of a Unix domain socket, and is required,
626 unless a *sock* argument is provided. Abstract Unix sockets,
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700627 :class:`str`, :class:`bytes`, and :class:`~pathlib.Path` paths
628 are supported.
Yury Selivanov423fd362017-11-20 17:26:28 -0500629
Bumsik Kim5cc583d2018-09-16 19:40:44 -0400630 See the documentation of the :meth:`loop.create_server` method
631 for information about arguments to this method.
632
Cheryl Sabella2d6097d2018-10-12 10:55:20 -0400633 .. availability:: Unix.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100634
Neil Aspinallf7686c12017-12-19 19:45:42 +0000635 .. versionadded:: 3.7
636
Elvis Pranskevichusc0d062f2018-06-08 11:36:00 -0400637 The *ssl_handshake_timeout* and *start_serving* parameters.
Neil Aspinallf7686c12017-12-19 19:45:42 +0000638
Yury Selivanov423fd362017-11-20 17:26:28 -0500639 .. versionchanged:: 3.7
640
641 The *path* parameter can now be a :class:`~pathlib.Path` object.
642
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700643.. coroutinemethod:: loop.connect_accepted_socket(protocol_factory, \
644 sock, \*, ssl=None, ssl_handshake_timeout=None)
Yury Selivanov3b3a1412016-11-07 15:35:25 -0500645
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700646 Wrap an already accepted connection into a transport/protocol pair.
Yury Selivanov3b3a1412016-11-07 15:35:25 -0500647
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700648 This method can be used by servers that accept connections outside
649 of asyncio but that use asyncio to handle them.
Yury Selivanov3b3a1412016-11-07 15:35:25 -0500650
651 Parameters:
652
Bumsik Kim5cc583d2018-09-16 19:40:44 -0400653 * *protocol_factory* must be a callable returning a
654 :ref:`protocol <asyncio-protocol>` implementation.
655
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700656 * *sock* is a preexisting socket object returned from
657 :meth:`socket.accept <socket.socket.accept>`.
Yury Selivanov3b3a1412016-11-07 15:35:25 -0500658
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700659 * *ssl* can be set to an :class:`~ssl.SSLContext` to enable SSL over
660 the accepted connections.
Yury Selivanov3b3a1412016-11-07 15:35:25 -0500661
Neil Aspinallf7686c12017-12-19 19:45:42 +0000662 * *ssl_handshake_timeout* is (for an SSL connection) the time in seconds to
663 wait for the SSL handshake to complete before aborting the connection.
Yury Selivanov96026432018-06-04 11:32:35 -0400664 ``60.0`` seconds if ``None`` (default).
Neil Aspinallf7686c12017-12-19 19:45:42 +0000665
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700666 Returns a ``(transport, protocol)`` pair.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100667
Neil Aspinallf7686c12017-12-19 19:45:42 +0000668 .. versionadded:: 3.7
669
670 The *ssl_handshake_timeout* parameter.
671
AraHaan431665b2017-11-21 11:06:26 -0500672 .. versionadded:: 3.5.3
673
674
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700675Transferring files
676^^^^^^^^^^^^^^^^^^
Andrew Svetlov7c684072018-01-27 21:22:47 +0200677
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700678.. coroutinemethod:: loop.sendfile(transport, file, \
679 offset=0, count=None, *, fallback=True)
Andrew Svetlov7c684072018-01-27 21:22:47 +0200680
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700681 Send a *file* over a *transport*. Return the total number of bytes
682 sent.
Andrew Svetlov7c684072018-01-27 21:22:47 +0200683
684 The method uses high-performance :meth:`os.sendfile` if available.
685
686 *file* must be a regular file object opened in binary mode.
687
688 *offset* tells from where to start reading the file. If specified,
689 *count* is the total number of bytes to transmit as opposed to
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400690 sending the file until EOF is reached. File position is always updated,
691 even when this method raises an error, and
692 :meth:`file.tell() <io.IOBase.tell>` can be used to obtain the actual
693 number of bytes sent.
Andrew Svetlov7c684072018-01-27 21:22:47 +0200694
695 *fallback* set to ``True`` makes asyncio to manually read and send
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700696 the file when the platform does not support the sendfile system call
Andrew Svetlov7c684072018-01-27 21:22:47 +0200697 (e.g. Windows or SSL socket on Unix).
698
699 Raise :exc:`SendfileNotAvailableError` if the system does not support
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400700 the *sendfile* syscall and *fallback* is ``False``.
Andrew Svetlov7c684072018-01-27 21:22:47 +0200701
702 .. versionadded:: 3.7
703
704
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500705TLS Upgrade
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700706^^^^^^^^^^^
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500707
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700708.. coroutinemethod:: loop.start_tls(transport, protocol, \
709 sslcontext, \*, server_side=False, \
710 server_hostname=None, ssl_handshake_timeout=None)
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500711
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700712 Upgrade an existing transport-based connection to TLS.
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500713
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700714 Return a new transport instance, that the *protocol* must start using
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500715 immediately after the *await*. The *transport* instance passed to
716 the *start_tls* method should never be used again.
717
718 Parameters:
719
720 * *transport* and *protocol* instances that methods like
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700721 :meth:`~loop.create_server` and
722 :meth:`~loop.create_connection` return.
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500723
724 * *sslcontext*: a configured instance of :class:`~ssl.SSLContext`.
725
726 * *server_side* pass ``True`` when a server-side connection is being
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700727 upgraded (like the one created by :meth:`~loop.create_server`).
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500728
729 * *server_hostname*: sets or overrides the host name that the target
730 server's certificate will be matched against.
731
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400732 * *ssl_handshake_timeout* is (for a TLS connection) the time in seconds to
733 wait for the TLS handshake to complete before aborting the connection.
Yury Selivanov96026432018-06-04 11:32:35 -0400734 ``60.0`` seconds if ``None`` (default).
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500735
736 .. versionadded:: 3.7
737
738
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700739Watching file descriptors
740^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerc1567df2014-02-08 23:22:58 +0100741
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700742.. method:: loop.add_reader(fd, callback, \*args)
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200743
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400744 Start monitoring the *fd* file descriptor for read availability and
745 invoke *callback* with the specified arguments once *fd* is available for
746 reading.
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200747
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700748.. method:: loop.remove_reader(fd)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100749
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400750 Stop monitoring the *fd* file descriptor for read availability.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100751
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700752.. method:: loop.add_writer(fd, callback, \*args)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100753
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400754 Start monitoring the *fd* file descriptor for write availability and
755 invoke *callback* with the specified arguments once *fd* is available for
756 writing.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100757
Yury Selivanove247b462018-09-20 12:43:59 -0400758 Use :func:`functools.partial` :ref:`to pass keyword arguments
Naglis17473342018-12-04 09:31:15 +0200759 <asyncio-pass-keywords>` to *callback*.
Victor Stinner8464c242014-11-28 13:15:41 +0100760
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700761.. method:: loop.remove_writer(fd)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100762
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400763 Stop monitoring the *fd* file descriptor for write availability.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100764
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700765See also :ref:`Platform Support <asyncio-platform-support>` section
766for some limitations of these methods.
Victor Stinner04e6df32014-10-11 16:16:27 +0200767
Victor Stinnerc1567df2014-02-08 23:22:58 +0100768
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700769Working with socket objects directly
770^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerc1567df2014-02-08 23:22:58 +0100771
Carol Willing5b7cbd62018-09-12 17:05:17 -0700772In general, protocol implementations that use transport-based APIs
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700773such as :meth:`loop.create_connection` and :meth:`loop.create_server`
774are faster than implementations that work with sockets directly.
Carol Willing5b7cbd62018-09-12 17:05:17 -0700775However, there are some use cases when performance is not critical, and
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700776working with :class:`~socket.socket` objects directly is more
777convenient.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100778
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700779.. coroutinemethod:: loop.sock_recv(sock, nbytes)
Yury Selivanov55c50842016-06-08 12:48:15 -0400780
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400781 Receive up to *nbytes* from *sock*. Asynchronous version of
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700782 :meth:`socket.recv() <socket.socket.recv>`.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100783
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400784 Return the received data as a bytes object.
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700785
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400786 *sock* must be a non-blocking socket.
Victor Stinnerec2ce092014-07-29 23:12:22 +0200787
Yury Selivanov19a44f62017-12-14 20:53:26 -0500788 .. versionchanged:: 3.7
Carol Willing5b7cbd62018-09-12 17:05:17 -0700789 Even though this method was always documented as a coroutine
790 method, releases before Python 3.7 returned a :class:`Future`.
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700791 Since Python 3.7 this is an ``async def`` method.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100792
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700793.. coroutinemethod:: loop.sock_recv_into(sock, buf)
Antoine Pitrou525f40d2017-10-19 21:46:40 +0200794
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400795 Receive data from *sock* into the *buf* buffer. Modeled after the blocking
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700796 :meth:`socket.recv_into() <socket.socket.recv_into>` method.
Antoine Pitrou525f40d2017-10-19 21:46:40 +0200797
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700798 Return the number of bytes written to the buffer.
Antoine Pitrou525f40d2017-10-19 21:46:40 +0200799
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400800 *sock* must be a non-blocking socket.
Antoine Pitrou525f40d2017-10-19 21:46:40 +0200801
Antoine Pitrou525f40d2017-10-19 21:46:40 +0200802 .. versionadded:: 3.7
803
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700804.. coroutinemethod:: loop.sock_sendall(sock, data)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100805
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400806 Send *data* to the *sock* socket. Asynchronous version of
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700807 :meth:`socket.sendall() <socket.socket.sendall>`.
Yury Selivanov55c50842016-06-08 12:48:15 -0400808
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400809 This method continues to send to the socket until either all data
810 in *data* has been sent or an error occurs. ``None`` is returned
Carol Willing5b7cbd62018-09-12 17:05:17 -0700811 on success. On error, an exception is raised. Additionally, there is no way
812 to determine how much data, if any, was successfully processed by the
813 receiving end of the connection.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100814
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400815 *sock* must be a non-blocking socket.
Victor Stinnerec2ce092014-07-29 23:12:22 +0200816
Yury Selivanov19a44f62017-12-14 20:53:26 -0500817 .. versionchanged:: 3.7
818 Even though the method was always documented as a coroutine
819 method, before Python 3.7 it returned an :class:`Future`.
820 Since Python 3.7, this is an ``async def`` method.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100821
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700822.. coroutinemethod:: loop.sock_connect(sock, address)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100823
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400824 Connect *sock* to a remote socket at *address*.
Victor Stinner1b0580b2014-02-13 09:24:37 +0100825
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700826 Asynchronous version of :meth:`socket.connect() <socket.socket.connect>`.
827
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400828 *sock* must be a non-blocking socket.
Victor Stinnerec2ce092014-07-29 23:12:22 +0200829
Yury Selivanov55c50842016-06-08 12:48:15 -0400830 .. versionchanged:: 3.5.2
831 ``address`` no longer needs to be resolved. ``sock_connect``
832 will try to check if the *address* is already resolved by calling
833 :func:`socket.inet_pton`. If not,
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700834 :meth:`loop.getaddrinfo` will be used to resolve the
Yury Selivanov55c50842016-06-08 12:48:15 -0400835 *address*.
836
Victor Stinnerc1567df2014-02-08 23:22:58 +0100837 .. seealso::
838
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700839 :meth:`loop.create_connection`
Yury Selivanov55c50842016-06-08 12:48:15 -0400840 and :func:`asyncio.open_connection() <open_connection>`.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100841
842
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700843.. coroutinemethod:: loop.sock_accept(sock)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100844
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700845 Accept a connection. Modeled after the blocking
846 :meth:`socket.accept() <socket.socket.accept>` method.
Yury Selivanov55c50842016-06-08 12:48:15 -0400847
848 The socket must be bound to an address and listening
Victor Stinnerc1567df2014-02-08 23:22:58 +0100849 for connections. The return value is a pair ``(conn, address)`` where *conn*
850 is a *new* socket object usable to send and receive data on the connection,
851 and *address* is the address bound to the socket on the other end of the
852 connection.
853
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400854 *sock* must be a non-blocking socket.
Victor Stinnerec2ce092014-07-29 23:12:22 +0200855
Yury Selivanov19a44f62017-12-14 20:53:26 -0500856 .. versionchanged:: 3.7
857 Even though the method was always documented as a coroutine
858 method, before Python 3.7 it returned a :class:`Future`.
859 Since Python 3.7, this is an ``async def`` method.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100860
861 .. seealso::
862
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700863 :meth:`loop.create_server` and :func:`start_server`.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100864
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700865.. coroutinemethod:: loop.sock_sendfile(sock, file, offset=0, count=None, \
866 \*, fallback=True)
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200867
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700868 Send a file using high-performance :mod:`os.sendfile` if possible.
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400869 Return the total number of bytes sent.
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200870
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700871 Asynchronous version of :meth:`socket.sendfile() <socket.socket.sendfile>`.
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200872
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400873 *sock* must be a non-blocking :const:`socket.SOCK_STREAM`
874 :class:`~socket.socket`.
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200875
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400876 *file* must be a regular file object open in binary mode.
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200877
878 *offset* tells from where to start reading the file. If specified,
879 *count* is the total number of bytes to transmit as opposed to
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400880 sending the file until EOF is reached. File position is always updated,
881 even when this method raises an error, and
882 :meth:`file.tell() <io.IOBase.tell>` can be used to obtain the actual
883 number of bytes sent.
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200884
Carol Willing5b7cbd62018-09-12 17:05:17 -0700885 *fallback*, when set to ``True``, makes asyncio manually read and send
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200886 the file when the platform does not support the sendfile syscall
887 (e.g. Windows or SSL socket on Unix).
888
Andrew Svetlov7464e872018-01-19 20:04:29 +0200889 Raise :exc:`SendfileNotAvailableError` if the system does not support
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200890 *sendfile* syscall and *fallback* is ``False``.
891
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400892 *sock* must be a non-blocking socket.
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700893
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200894 .. versionadded:: 3.7
895
Victor Stinnerc1567df2014-02-08 23:22:58 +0100896
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700897DNS
898^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +0100899
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700900.. coroutinemethod:: loop.getaddrinfo(host, port, \*, family=0, \
901 type=0, proto=0, flags=0)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100902
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700903 Asynchronous version of :meth:`socket.getaddrinfo`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100904
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700905.. coroutinemethod:: loop.getnameinfo(sockaddr, flags=0)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100906
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700907 Asynchronous version of :meth:`socket.getnameinfo`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100908
Yury Selivanovbec23722018-01-28 14:09:40 -0500909.. versionchanged:: 3.7
910 Both *getaddrinfo* and *getnameinfo* methods were always documented
911 to return a coroutine, but prior to Python 3.7 they were, in fact,
912 returning :class:`asyncio.Future` objects. Starting with Python 3.7
913 both methods are coroutines.
914
Victor Stinnerea3183f2013-12-03 01:08:00 +0100915
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700916Working with pipes
917^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +0100918
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700919.. coroutinemethod:: loop.connect_read_pipe(protocol_factory, pipe)
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200920
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400921 Register the read end of *pipe* in the event loop.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100922
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700923 *protocol_factory* must be a callable returning an
924 :ref:`asyncio protocol <asyncio-protocol>` implementation.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100925
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700926 *pipe* is a :term:`file-like object <file object>`.
927
928 Return pair ``(transport, protocol)``, where *transport* supports
Bumsik Kim5cc583d2018-09-16 19:40:44 -0400929 the :class:`ReadTransport` interface and *protocol* is an object
930 instantiated by the *protocol_factory*.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100931
Victor Stinnerd84fd732014-08-26 01:01:59 +0200932 With :class:`SelectorEventLoop` event loop, the *pipe* is set to
933 non-blocking mode.
934
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700935.. coroutinemethod:: loop.connect_write_pipe(protocol_factory, pipe)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100936
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400937 Register the write end of *pipe* in the event loop.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100938
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700939 *protocol_factory* must be a callable returning an
940 :ref:`asyncio protocol <asyncio-protocol>` implementation.
941
942 *pipe* is :term:`file-like object <file object>`.
943
Victor Stinner2cef3002014-10-23 22:38:46 +0200944 Return pair ``(transport, protocol)``, where *transport* supports
Bumsik Kim5cc583d2018-09-16 19:40:44 -0400945 :class:`WriteTransport` interface and *protocol* is an object
946 instantiated by the *protocol_factory*.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100947
Victor Stinnerd84fd732014-08-26 01:01:59 +0200948 With :class:`SelectorEventLoop` event loop, the *pipe* is set to
949 non-blocking mode.
950
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700951.. note::
952
953 :class:`SelectorEventLoop` does not support the above methods on
Carol Willing5b7cbd62018-09-12 17:05:17 -0700954 Windows. Use :class:`ProactorEventLoop` instead for Windows.
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700955
Victor Stinner08444382014-02-02 22:43:39 +0100956.. seealso::
957
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700958 The :meth:`loop.subprocess_exec` and
959 :meth:`loop.subprocess_shell` methods.
Victor Stinner08444382014-02-02 22:43:39 +0100960
Victor Stinnerea3183f2013-12-03 01:08:00 +0100961
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400962Unix signals
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700963^^^^^^^^^^^^
Victor Stinner8b863482014-01-27 10:07:50 +0100964
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700965.. method:: loop.add_signal_handler(signum, callback, \*args)
Victor Stinner8b863482014-01-27 10:07:50 +0100966
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400967 Set *callback* as the handler for the *signum* signal.
Victor Stinner8b863482014-01-27 10:07:50 +0100968
Hrvoje Nikšiće3666fc2018-12-18 22:31:29 +0100969 The callback will be invoked by *loop*, along with other queued callbacks
970 and runnable coroutines of that event loop. Unlike signal handlers
971 registered using :func:`signal.signal`, a callback registered with this
972 function is allowed to interact with the event loop.
973
Victor Stinner8b863482014-01-27 10:07:50 +0100974 Raise :exc:`ValueError` if the signal number is invalid or uncatchable.
975 Raise :exc:`RuntimeError` if there is a problem setting up the handler.
976
Yury Selivanove247b462018-09-20 12:43:59 -0400977 Use :func:`functools.partial` :ref:`to pass keyword arguments
Naglis17473342018-12-04 09:31:15 +0200978 <asyncio-pass-keywords>` to *callback*.
Victor Stinner8464c242014-11-28 13:15:41 +0100979
Hrvoje Nikšiće3666fc2018-12-18 22:31:29 +0100980 Like :func:`signal.signal`, this function must be invoked in the main
981 thread.
982
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700983.. method:: loop.remove_signal_handler(sig)
Victor Stinner8b863482014-01-27 10:07:50 +0100984
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400985 Remove the handler for the *sig* signal.
Victor Stinner8b863482014-01-27 10:07:50 +0100986
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400987 Return ``True`` if the signal handler was removed, or ``False`` if
988 no handler was set for the given signal.
Victor Stinner8b863482014-01-27 10:07:50 +0100989
Cheryl Sabella2d6097d2018-10-12 10:55:20 -0400990 .. availability:: Unix.
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700991
Victor Stinner8b863482014-01-27 10:07:50 +0100992.. seealso::
993
994 The :mod:`signal` module.
995
996
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700997Executing code in thread or process pools
998^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +0100999
Yury Selivanov47150392018-09-18 17:55:44 -04001000.. awaitablemethod:: loop.run_in_executor(executor, func, \*args)
Victor Stinnerea3183f2013-12-03 01:08:00 +01001001
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001002 Arrange for *func* to be called in the specified executor.
Victor Stinnerea3183f2013-12-03 01:08:00 +01001003
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001004 The *executor* argument should be an :class:`concurrent.futures.Executor`
Larry Hastings3732ed22014-03-15 21:13:56 -07001005 instance. The default executor is used if *executor* is ``None``.
Victor Stinnerea3183f2013-12-03 01:08:00 +01001006
Yury Selivanove247b462018-09-20 12:43:59 -04001007 Example::
1008
1009 import asyncio
1010 import concurrent.futures
1011
1012 def blocking_io():
1013 # File operations (such as logging) can block the
1014 # event loop: run them in a thread pool.
1015 with open('/dev/urandom', 'rb') as f:
1016 return f.read(100)
1017
1018 def cpu_bound():
1019 # CPU-bound operations will block the event loop:
1020 # in general it is preferable to run them in a
1021 # process pool.
1022 return sum(i * i for i in range(10 ** 7))
1023
1024 async def main():
1025 loop = asyncio.get_running_loop()
1026
1027 ## Options:
1028
1029 # 1. Run in the default loop's executor:
1030 result = await loop.run_in_executor(
1031 None, blocking_io)
1032 print('default thread pool', result)
1033
1034 # 2. Run in a custom thread pool:
1035 with concurrent.futures.ThreadPoolExecutor() as pool:
1036 result = await loop.run_in_executor(
1037 pool, blocking_io)
1038 print('custom thread pool', result)
1039
1040 # 3. Run in a custom process pool:
1041 with concurrent.futures.ProcessPoolExecutor() as pool:
1042 result = await loop.run_in_executor(
1043 pool, cpu_bound)
1044 print('custom process pool', result)
1045
1046 asyncio.run(main())
Victor Stinner8464c242014-11-28 13:15:41 +01001047
Yury Selivanovbec23722018-01-28 14:09:40 -05001048 This method returns a :class:`asyncio.Future` object.
1049
Yury Selivanove247b462018-09-20 12:43:59 -04001050 Use :func:`functools.partial` :ref:`to pass keyword arguments
1051 <asyncio-pass-keywords>` to *func*.
1052
Yury Selivanove8a60452016-10-21 17:40:42 -04001053 .. versionchanged:: 3.5.3
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001054 :meth:`loop.run_in_executor` no longer configures the
Yury Selivanove8a60452016-10-21 17:40:42 -04001055 ``max_workers`` of the thread pool executor it creates, instead
1056 leaving it up to the thread pool executor
1057 (:class:`~concurrent.futures.ThreadPoolExecutor`) to set the
1058 default.
1059
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001060.. method:: loop.set_default_executor(executor)
Victor Stinnerea3183f2013-12-03 01:08:00 +01001061
Elvis Pranskevichus22d25082018-07-30 11:42:43 +01001062 Set *executor* as the default executor used by :meth:`run_in_executor`.
1063 *executor* should be an instance of
1064 :class:`~concurrent.futures.ThreadPoolExecutor`.
1065
1066 .. deprecated:: 3.8
1067 Using an executor that is not an instance of
1068 :class:`~concurrent.futures.ThreadPoolExecutor` is deprecated and
1069 will trigger an error in Python 3.9.
Victor Stinnerea3183f2013-12-03 01:08:00 +01001070
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001071 *executor* must be an instance of
1072 :class:`concurrent.futures.ThreadPoolExecutor`.
1073
Victor Stinnerea3183f2013-12-03 01:08:00 +01001074
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001075Error Handling API
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001076^^^^^^^^^^^^^^^^^^
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001077
Martin Panterc04fb562016-02-10 05:44:01 +00001078Allows customizing how exceptions are handled in the event loop.
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001079
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001080.. method:: loop.set_exception_handler(handler)
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001081
1082 Set *handler* as the new event loop exception handler.
1083
1084 If *handler* is ``None``, the default exception handler will
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001085 be set. Otherwise, *handler* must be a callable with the signature
1086 matching ``(loop, context)``, where ``loop``
1087 is a reference to the active event loop, and ``context``
1088 is a ``dict`` object containing the details of the exception
1089 (see :meth:`call_exception_handler` documentation for details
1090 about context).
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001091
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001092.. method:: loop.get_exception_handler()
Yury Selivanov950204d2016-05-16 16:23:00 -04001093
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001094 Return the current exception handler, or ``None`` if no custom
1095 exception handler was set.
Yury Selivanov950204d2016-05-16 16:23:00 -04001096
1097 .. versionadded:: 3.5.2
1098
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001099.. method:: loop.default_exception_handler(context)
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001100
1101 Default exception handler.
1102
1103 This is called when an exception occurs and no exception
Carol Willing5b7cbd62018-09-12 17:05:17 -07001104 handler is set. This can be called by a custom exception
1105 handler that wants to defer to the default handler behavior.
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001106
1107 *context* parameter has the same meaning as in
1108 :meth:`call_exception_handler`.
1109
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001110.. method:: loop.call_exception_handler(context)
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001111
1112 Call the current event loop exception handler.
1113
1114 *context* is a ``dict`` object containing the following keys
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001115 (new keys may be introduced in future Python versions):
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001116
1117 * 'message': Error message;
1118 * 'exception' (optional): Exception object;
1119 * 'future' (optional): :class:`asyncio.Future` instance;
1120 * 'handle' (optional): :class:`asyncio.Handle` instance;
1121 * 'protocol' (optional): :ref:`Protocol <asyncio-protocol>` instance;
1122 * 'transport' (optional): :ref:`Transport <asyncio-transport>` instance;
1123 * 'socket' (optional): :class:`socket.socket` instance.
1124
1125 .. note::
1126
Carol Willing5b7cbd62018-09-12 17:05:17 -07001127 This method should not be overloaded in subclassed
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001128 event loops. For custom exception handling, use
1129 the :meth:`set_exception_handler()` method.
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001130
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001131Enabling debug mode
1132^^^^^^^^^^^^^^^^^^^
Victor Stinner0f3e6bc2014-02-19 23:15:02 +01001133
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001134.. method:: loop.get_debug()
Victor Stinner0f3e6bc2014-02-19 23:15:02 +01001135
Victor Stinner7b7120e2014-06-23 00:12:14 +02001136 Get the debug mode (:class:`bool`) of the event loop.
1137
1138 The default value is ``True`` if the environment variable
1139 :envvar:`PYTHONASYNCIODEBUG` is set to a non-empty string, ``False``
1140 otherwise.
Victor Stinner0f3e6bc2014-02-19 23:15:02 +01001141
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001142.. method:: loop.set_debug(enabled: bool)
Victor Stinner0f3e6bc2014-02-19 23:15:02 +01001143
1144 Set the debug mode of the event loop.
1145
Yury Selivanov805e27e2018-09-14 16:57:11 -07001146 .. versionchanged:: 3.7
1147
1148 The new ``-X dev`` command line option can now also be used
1149 to enable the debug mode.
1150
Victor Stinner0f3e6bc2014-02-19 23:15:02 +01001151.. seealso::
1152
Victor Stinner62511fd2014-06-23 00:36:11 +02001153 The :ref:`debug mode of asyncio <asyncio-debug-mode>`.
Victor Stinner0f3e6bc2014-02-19 23:15:02 +01001154
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001155
1156Running Subprocesses
1157^^^^^^^^^^^^^^^^^^^^
1158
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001159Methods described in this subsections are low-level. In regular
1160async/await code consider using the high-level
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001161:func:`asyncio.create_subprocess_shell` and
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001162:func:`asyncio.create_subprocess_exec` convenience functions instead.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001163
1164.. note::
1165
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001166 The default asyncio event loop on **Windows** does not support
1167 subprocesses. See :ref:`Subprocess Support on Windows
1168 <asyncio-windows-subprocess>` for details.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001169
1170.. coroutinemethod:: loop.subprocess_exec(protocol_factory, \*args, \
1171 stdin=subprocess.PIPE, stdout=subprocess.PIPE, \
1172 stderr=subprocess.PIPE, \*\*kwargs)
1173
1174 Create a subprocess from one or more string arguments specified by
1175 *args*.
1176
1177 *args* must be a list of strings represented by:
1178
1179 * :class:`str`;
1180 * or :class:`bytes`, encoded to the
1181 :ref:`filesystem encoding <filesystem-encoding>`.
1182
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001183 The first string specifies the program executable,
Carol Willing5b7cbd62018-09-12 17:05:17 -07001184 and the remaining strings specify the arguments. Together, string
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001185 arguments form the ``argv`` of the program.
1186
1187 This is similar to the standard library :class:`subprocess.Popen`
1188 class called with ``shell=False`` and the list of strings passed as
1189 the first argument; however, where :class:`~subprocess.Popen` takes
1190 a single argument which is list of strings, *subprocess_exec*
1191 takes multiple string arguments.
1192
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001193 The *protocol_factory* must be a callable returning a subclass of the
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001194 :class:`asyncio.SubprocessProtocol` class.
1195
1196 Other parameters:
1197
1198 * *stdin*: either a file-like object representing a pipe to be
1199 connected to the subprocess's standard input stream using
1200 :meth:`~loop.connect_write_pipe`, or the
1201 :const:`subprocess.PIPE` constant (default). By default a new
1202 pipe will be created and connected.
1203
1204 * *stdout*: either a file-like object representing the pipe to be
1205 connected to the subprocess's standard output stream using
1206 :meth:`~loop.connect_read_pipe`, or the
1207 :const:`subprocess.PIPE` constant (default). By default a new pipe
1208 will be created and connected.
1209
1210 * *stderr*: either a file-like object representing the pipe to be
1211 connected to the subprocess's standard error stream using
1212 :meth:`~loop.connect_read_pipe`, or one of
1213 :const:`subprocess.PIPE` (default) or :const:`subprocess.STDOUT`
1214 constants.
1215
1216 By default a new pipe will be created and connected. When
1217 :const:`subprocess.STDOUT` is specified, the subprocess' standard
1218 error stream will be connected to the same pipe as the standard
1219 output stream.
1220
1221 * All other keyword arguments are passed to :class:`subprocess.Popen`
1222 without interpretation, except for *bufsize*, *universal_newlines*
1223 and *shell*, which should not be specified at all.
1224
1225 See the constructor of the :class:`subprocess.Popen` class
1226 for documentation on other arguments.
1227
1228 Returns a pair of ``(transport, protocol)``, where *transport*
Bumsik Kim5cc583d2018-09-16 19:40:44 -04001229 conforms to the :class:`asyncio.SubprocessTransport` base class and
1230 *protocol* is an object instantiated by the *protocol_factory*.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001231
1232.. coroutinemethod:: loop.subprocess_shell(protocol_factory, cmd, \*, \
1233 stdin=subprocess.PIPE, stdout=subprocess.PIPE, \
1234 stderr=subprocess.PIPE, \*\*kwargs)
1235
1236 Create a subprocess from *cmd*, which can be a :class:`str` or a
1237 :class:`bytes` string encoded to the
1238 :ref:`filesystem encoding <filesystem-encoding>`,
1239 using the platform's "shell" syntax.
1240
1241 This is similar to the standard library :class:`subprocess.Popen`
1242 class called with ``shell=True``.
1243
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001244 The *protocol_factory* must be a callable returning a subclass of the
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001245 :class:`SubprocessProtocol` class.
1246
1247 See :meth:`~loop.subprocess_exec` for more details about
1248 the remaining arguments.
1249
1250 Returns a pair of ``(transport, protocol)``, where *transport*
Bumsik Kim5cc583d2018-09-16 19:40:44 -04001251 conforms to the :class:`SubprocessTransport` base class and
1252 *protocol* is an object instantiated by the *protocol_factory*.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001253
1254.. note::
1255 It is the application's responsibility to ensure that all whitespace
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001256 and special characters are quoted appropriately to avoid `shell injection
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001257 <https://en.wikipedia.org/wiki/Shell_injection#Shell_injection>`_
1258 vulnerabilities. The :func:`shlex.quote` function can be used to
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001259 properly escape whitespace and special characters in strings that
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001260 are going to be used to construct shell commands.
1261
1262
1263Callback Handles
1264================
1265
1266.. class:: Handle
1267
1268 A callback wrapper object returned by :meth:`loop.call_soon`,
1269 :meth:`loop.call_soon_threadsafe`.
1270
1271 .. method:: cancel()
1272
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001273 Cancel the callback. If the callback has already been canceled
1274 or executed, this method has no effect.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001275
1276 .. method:: cancelled()
1277
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001278 Return ``True`` if the callback was cancelled.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001279
1280 .. versionadded:: 3.7
1281
1282.. class:: TimerHandle
1283
1284 A callback wrapper object returned by :meth:`loop.call_later`,
1285 and :meth:`loop.call_at`.
1286
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001287 This class is a subclass of :class:`Handle`.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001288
1289 .. method:: when()
1290
1291 Return a scheduled callback time as :class:`float` seconds.
1292
1293 The time is an absolute timestamp, using the same time
1294 reference as :meth:`loop.time`.
1295
1296 .. versionadded:: 3.7
1297
1298
1299Server Objects
1300==============
1301
1302Server objects are created by :meth:`loop.create_server`,
1303:meth:`loop.create_unix_server`, :func:`start_server`,
1304and :func:`start_unix_server` functions.
1305
1306Do not instantiate the class directly.
Victor Stinner8c462c52014-01-24 18:11:43 +01001307
Victor Stinner8ebeb032014-07-11 23:47:40 +02001308.. class:: Server
Victor Stinner8c462c52014-01-24 18:11:43 +01001309
Yury Selivanovc9070d02018-01-25 18:08:09 -05001310 *Server* objects are asynchronous context managers. When used in an
1311 ``async with`` statement, it's guaranteed that the Server object is
1312 closed and not accepting new connections when the ``async with``
1313 statement is completed::
1314
1315 srv = await loop.create_server(...)
1316
1317 async with srv:
1318 # some code
1319
Carol Willing5b7cbd62018-09-12 17:05:17 -07001320 # At this point, srv is closed and no longer accepts new connections.
Yury Selivanovc9070d02018-01-25 18:08:09 -05001321
1322
1323 .. versionchanged:: 3.7
1324 Server object is an asynchronous context manager since Python 3.7.
Victor Stinner8c462c52014-01-24 18:11:43 +01001325
1326 .. method:: close()
1327
Victor Stinner4bfb14a2014-07-12 03:20:24 +02001328 Stop serving: close listening sockets and set the :attr:`sockets`
1329 attribute to ``None``.
1330
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001331 The sockets that represent existing incoming client connections
1332 are left open.
Victor Stinner8ebeb032014-07-11 23:47:40 +02001333
Berker Peksag49c9edf2016-01-20 07:14:22 +02001334 The server is closed asynchronously, use the :meth:`wait_closed`
1335 coroutine to wait until the server is closed.
Victor Stinner8c462c52014-01-24 18:11:43 +01001336
Srinivas Reddy Thatiparthy (శ్రీనివాస్ రెడ్డి తాటిపర్తి)1634fc22017-12-30 20:39:32 +05301337 .. method:: get_loop()
1338
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001339 Return the event loop associated with the server object.
Srinivas Reddy Thatiparthy (శ్రీనివాస్ రెడ్డి తాటిపర్తి)1634fc22017-12-30 20:39:32 +05301340
1341 .. versionadded:: 3.7
1342
Yury Selivanovc9070d02018-01-25 18:08:09 -05001343 .. coroutinemethod:: start_serving()
1344
1345 Start accepting connections.
1346
1347 This method is idempotent, so it can be called when
1348 the server is already being serving.
1349
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001350 The *start_serving* keyword-only parameter to
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001351 :meth:`loop.create_server` and
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001352 :meth:`asyncio.start_server` allows creating a Server object
1353 that is not accepting connections initially. In this case
1354 ``Server.start_serving()``, or :meth:`Server.serve_forever` can be used
1355 to make the Server start accepting connections.
Yury Selivanovc9070d02018-01-25 18:08:09 -05001356
1357 .. versionadded:: 3.7
1358
1359 .. coroutinemethod:: serve_forever()
1360
1361 Start accepting connections until the coroutine is cancelled.
1362 Cancellation of ``serve_forever`` task causes the server
1363 to be closed.
1364
1365 This method can be called if the server is already accepting
1366 connections. Only one ``serve_forever`` task can exist per
1367 one *Server* object.
1368
1369 Example::
1370
1371 async def client_connected(reader, writer):
1372 # Communicate with the client with
1373 # reader/writer streams. For example:
1374 await reader.readline()
1375
1376 async def main(host, port):
1377 srv = await asyncio.start_server(
1378 client_connected, host, port)
Andrew Svetlov17ab8f02018-02-17 19:44:35 +02001379 await srv.serve_forever()
Yury Selivanovc9070d02018-01-25 18:08:09 -05001380
1381 asyncio.run(main('127.0.0.1', 0))
1382
1383 .. versionadded:: 3.7
1384
1385 .. method:: is_serving()
1386
1387 Return ``True`` if the server is accepting new connections.
1388
1389 .. versionadded:: 3.7
1390
Victor Stinnerbdd574d2015-02-12 22:49:18 +01001391 .. coroutinemethod:: wait_closed()
Victor Stinner8c462c52014-01-24 18:11:43 +01001392
Victor Stinner8ebeb032014-07-11 23:47:40 +02001393 Wait until the :meth:`close` method completes.
1394
Victor Stinner8ebeb032014-07-11 23:47:40 +02001395 .. attribute:: sockets
1396
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001397 List of :class:`socket.socket` objects the server is listening on,
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001398 or ``None`` if the server is closed.
Victor Stinner8c462c52014-01-24 18:11:43 +01001399
Yury Selivanovc9070d02018-01-25 18:08:09 -05001400 .. versionchanged:: 3.7
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001401 Prior to Python 3.7 ``Server.sockets`` used to return an
1402 internal list of server sockets directly. In 3.7 a copy
Yury Selivanovc9070d02018-01-25 18:08:09 -05001403 of that list is returned.
1404
Victor Stinner8c462c52014-01-24 18:11:43 +01001405
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001406.. _asyncio-event-loops:
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001407
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001408Event Loop Implementations
1409==========================
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001410
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001411asyncio ships with two different event loop implementations:
1412:class:`SelectorEventLoop` and :class:`ProactorEventLoop`.
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001413
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001414By default asyncio is configured to use :class:`SelectorEventLoop`
1415on all platforms.
Andrew Svetlov3d4dbd82018-02-01 19:59:32 +02001416
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001417
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001418.. class:: SelectorEventLoop
1419
1420 An event loop based on the :mod:`selectors` module.
1421
1422 Uses the most efficient *selector* available for the given
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001423 platform. It is also possible to manually configure the
1424 exact selector implementation to be used::
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001425
1426 import asyncio
1427 import selectors
1428
1429 selector = selectors.SelectSelector()
1430 loop = asyncio.SelectorEventLoop(selector)
1431 asyncio.set_event_loop(loop)
Andrew Svetlov7464e872018-01-19 20:04:29 +02001432
1433
Cheryl Sabella2d6097d2018-10-12 10:55:20 -04001434 .. availability:: Unix, Windows.
Andrew Svetlov7464e872018-01-19 20:04:29 +02001435
1436
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001437.. class:: ProactorEventLoop
1438
1439 An event loop for Windows that uses "I/O Completion Ports" (IOCP).
1440
Cheryl Sabella2d6097d2018-10-12 10:55:20 -04001441 .. availability:: Windows.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001442
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001443 .. seealso::
1444
1445 `MSDN documentation on I/O Completion Ports
1446 <https://docs.microsoft.com/en-ca/windows/desktop/FileIO/i-o-completion-ports>`_.
1447
1448
1449.. class:: AbstractEventLoop
1450
1451 Abstract base class for asyncio-compliant event loops.
1452
1453 The :ref:`Event Loop Methods <asyncio-event-loop>` section lists all
1454 methods that an alternative implementation of ``AbstractEventLoop``
1455 should have defined.
1456
1457
1458Examples
1459========
1460
1461Note that all examples in this section **purposefully** show how
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001462to use the low-level event loop APIs, such as :meth:`loop.run_forever`
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001463and :meth:`loop.call_soon`. Modern asyncio applications rarely
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001464need to be written this way; consider using the high-level functions
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001465like :func:`asyncio.run`.
1466
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001467
Yury Selivanov394374e2018-09-17 15:35:24 -04001468.. _asyncio_example_lowlevel_helloworld:
Victor Stinnerea3183f2013-12-03 01:08:00 +01001469
Victor Stinner7f314ed2014-10-15 18:49:16 +02001470Hello World with call_soon()
Victor Stinnera092a612015-01-09 15:58:41 +01001471^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +01001472
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001473An example using the :meth:`loop.call_soon` method to schedule a
1474callback. The callback displays ``"Hello World"`` and then stops the
1475event loop::
Victor Stinnerea3183f2013-12-03 01:08:00 +01001476
1477 import asyncio
1478
Victor Stinner7f314ed2014-10-15 18:49:16 +02001479 def hello_world(loop):
Carol Willing5b7cbd62018-09-12 17:05:17 -07001480 """A callback to print 'Hello World' and stop the event loop"""
Victor Stinnerea3183f2013-12-03 01:08:00 +01001481 print('Hello World')
Victor Stinner7f314ed2014-10-15 18:49:16 +02001482 loop.stop()
Victor Stinnerea3183f2013-12-03 01:08:00 +01001483
1484 loop = asyncio.get_event_loop()
Victor Stinner7f314ed2014-10-15 18:49:16 +02001485
1486 # Schedule a call to hello_world()
1487 loop.call_soon(hello_world, loop)
1488
1489 # Blocking call interrupted by loop.stop()
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001490 try:
1491 loop.run_forever()
1492 finally:
1493 loop.close()
Victor Stinnerea3183f2013-12-03 01:08:00 +01001494
Victor Stinner3e09e322013-12-03 01:22:06 +01001495.. seealso::
Victor Stinnerea3183f2013-12-03 01:08:00 +01001496
Yury Selivanov3faaa882018-09-14 13:32:07 -07001497 A similar :ref:`Hello World <coroutine>`
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001498 example created with a coroutine and the :func:`run` function.
Victor Stinnerea3183f2013-12-03 01:08:00 +01001499
Victor Stinner8b863482014-01-27 10:07:50 +01001500
Yury Selivanov394374e2018-09-17 15:35:24 -04001501.. _asyncio_example_call_later:
Victor Stinner7f314ed2014-10-15 18:49:16 +02001502
1503Display the current date with call_later()
Victor Stinnera092a612015-01-09 15:58:41 +01001504^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinner7f314ed2014-10-15 18:49:16 +02001505
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001506An example of a callback displaying the current date every second. The
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001507callback uses the :meth:`loop.call_later` method to reschedule itself
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001508after 5 seconds, and then stops the event loop::
Victor Stinner7f314ed2014-10-15 18:49:16 +02001509
1510 import asyncio
1511 import datetime
1512
1513 def display_date(end_time, loop):
1514 print(datetime.datetime.now())
1515 if (loop.time() + 1.0) < end_time:
1516 loop.call_later(1, display_date, end_time, loop)
1517 else:
1518 loop.stop()
1519
1520 loop = asyncio.get_event_loop()
1521
1522 # Schedule the first call to display_date()
1523 end_time = loop.time() + 5.0
1524 loop.call_soon(display_date, end_time, loop)
1525
1526 # Blocking call interrupted by loop.stop()
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001527 try:
1528 loop.run_forever()
1529 finally:
1530 loop.close()
Victor Stinner7f314ed2014-10-15 18:49:16 +02001531
1532.. seealso::
1533
Yury Selivanov7372c3b2018-09-14 15:11:24 -07001534 A similar :ref:`current date <asyncio_example_sleep>` example
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001535 created with a coroutine and the :func:`run` function.
Victor Stinner7f314ed2014-10-15 18:49:16 +02001536
1537
Yury Selivanov394374e2018-09-17 15:35:24 -04001538.. _asyncio_example_watch_fd:
Victor Stinner8b863482014-01-27 10:07:50 +01001539
Victor Stinner04e6df32014-10-11 16:16:27 +02001540Watch a file descriptor for read events
Victor Stinnera092a612015-01-09 15:58:41 +01001541^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinner04e6df32014-10-11 16:16:27 +02001542
1543Wait until a file descriptor received some data using the
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001544:meth:`loop.add_reader` method and then close the event loop::
Victor Stinner04e6df32014-10-11 16:16:27 +02001545
1546 import asyncio
Victor Stinnerac577d72017-11-28 21:33:20 +01001547 from socket import socketpair
Victor Stinner04e6df32014-10-11 16:16:27 +02001548
1549 # Create a pair of connected file descriptors
Victor Stinnerccd8e342014-10-11 16:30:02 +02001550 rsock, wsock = socketpair()
Carol Willing5b7cbd62018-09-12 17:05:17 -07001551
Victor Stinner04e6df32014-10-11 16:16:27 +02001552 loop = asyncio.get_event_loop()
1553
1554 def reader():
1555 data = rsock.recv(100)
1556 print("Received:", data.decode())
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001557
Victor Stinner2cef3002014-10-23 22:38:46 +02001558 # We are done: unregister the file descriptor
Victor Stinner04e6df32014-10-11 16:16:27 +02001559 loop.remove_reader(rsock)
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001560
Victor Stinner04e6df32014-10-11 16:16:27 +02001561 # Stop the event loop
1562 loop.stop()
1563
Victor Stinner2cef3002014-10-23 22:38:46 +02001564 # Register the file descriptor for read event
Victor Stinner04e6df32014-10-11 16:16:27 +02001565 loop.add_reader(rsock, reader)
1566
1567 # Simulate the reception of data from the network
1568 loop.call_soon(wsock.send, 'abc'.encode())
1569
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001570 try:
1571 # Run the event loop
1572 loop.run_forever()
1573 finally:
Carol Willing5b7cbd62018-09-12 17:05:17 -07001574 # We are done. Close sockets and the event loop.
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001575 rsock.close()
1576 wsock.close()
1577 loop.close()
Victor Stinner04e6df32014-10-11 16:16:27 +02001578
1579.. seealso::
1580
Yury Selivanov394374e2018-09-17 15:35:24 -04001581 * A similar :ref:`example <asyncio_example_create_connection>`
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001582 using transports, protocols, and the
1583 :meth:`loop.create_connection` method.
Victor Stinner04e6df32014-10-11 16:16:27 +02001584
Yury Selivanov394374e2018-09-17 15:35:24 -04001585 * Another similar :ref:`example <asyncio_example_create_connection-streams>`
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001586 using the high-level :func:`asyncio.open_connection` function
1587 and streams.
Victor Stinner04e6df32014-10-11 16:16:27 +02001588
1589
Yury Selivanov394374e2018-09-17 15:35:24 -04001590.. _asyncio_example_unix_signals:
1591
Victor Stinner04e6df32014-10-11 16:16:27 +02001592Set signal handlers for SIGINT and SIGTERM
Victor Stinnera092a612015-01-09 15:58:41 +01001593^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinner04e6df32014-10-11 16:16:27 +02001594
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -04001595(This ``signals`` example only works on Unix.)
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001596
1597Register handlers for signals :py:data:`SIGINT` and :py:data:`SIGTERM`
1598using the :meth:`loop.add_signal_handler` method::
Victor Stinner8b863482014-01-27 10:07:50 +01001599
1600 import asyncio
1601 import functools
1602 import os
1603 import signal
1604
1605 def ask_exit(signame):
1606 print("got signal %s: exit" % signame)
1607 loop.stop()
1608
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001609 async def main():
1610 loop = asyncio.get_running_loop()
Victor Stinner8b863482014-01-27 10:07:50 +01001611
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001612 for signame in {'SIGINT', 'SIGTERM'}:
1613 loop.add_signal_handler(
1614 getattr(signal, signame),
1615 functools.partial(ask_exit, signame))
Victor Stinner2cef3002014-10-23 22:38:46 +02001616
Yury Selivanov7c7605f2018-09-11 09:54:40 -07001617 await asyncio.sleep(3600)
1618
1619 print("Event loop running for 1 hour, press Ctrl+C to interrupt.")
1620 print(f"pid {os.getpid()}: send SIGINT or SIGTERM to exit.")
1621
1622 asyncio.run(main())