blob: ca8055bd162f695d431ee3d20b2f12edd122666b [file] [log] [blame]
R David Murray6a143812013-12-20 14:37:39 -05001.. currentmodule:: asyncio
Victor Stinnerea3183f2013-12-03 01:08:00 +01002
Victor Stinner9592edb2014-02-02 15:03:02 +01003.. _asyncio-event-loop:
Victor Stinnerea3183f2013-12-03 01:08:00 +01004
Victor Stinneraea82292014-07-08 23:42:38 +02005Base Event Loop
6===============
Victor Stinnerea3183f2013-12-03 01:08:00 +01007
lf627d2c82017-07-25 17:03:51 -06008**Source code:** :source:`Lib/asyncio/events.py`
9
Victor Stinnerea3183f2013-12-03 01:08:00 +010010The event loop is the central execution device provided by :mod:`asyncio`.
Zachary Ware5e580da2015-08-27 15:54:39 -050011It provides multiple facilities, including:
Victor Stinnerea3183f2013-12-03 01:08:00 +010012
Eli Benderskyb73c8332014-02-09 06:07:47 -080013* Registering, executing and cancelling delayed calls (timeouts).
Victor Stinnerea3183f2013-12-03 01:08:00 +010014
Victor Stinner9592edb2014-02-02 15:03:02 +010015* Creating client and server :ref:`transports <asyncio-transport>` for various
Eli Benderskyb73c8332014-02-09 06:07:47 -080016 kinds of communication.
Victor Stinnerea3183f2013-12-03 01:08:00 +010017
Eli Bendersky136fea22014-02-09 06:55:58 -080018* Launching subprocesses and the associated :ref:`transports
19 <asyncio-transport>` for communication with an external program.
Victor Stinnerea3183f2013-12-03 01:08:00 +010020
Eli Benderskyb73c8332014-02-09 06:07:47 -080021* Delegating costly function calls to a pool of threads.
Victor Stinnerea3183f2013-12-03 01:08:00 +010022
Victor Stinneraea82292014-07-08 23:42:38 +020023.. class:: BaseEventLoop
Eli Bendersky136fea22014-02-09 06:55:58 -080024
Guido van Rossumf68afd82016-08-08 09:41:21 -070025 This class is an implementation detail. It is a subclass of
26 :class:`AbstractEventLoop` and may be a base class of concrete
27 event loop implementations found in :mod:`asyncio`. It should not
28 be used directly; use :class:`AbstractEventLoop` instead.
29 ``BaseEventLoop`` should not be subclassed by third-party code; the
30 internal interface is not stable.
31
32.. class:: AbstractEventLoop
33
34 Abstract base class of event loops.
Victor Stinnerea3183f2013-12-03 01:08:00 +010035
Victor Stinner83704962015-02-25 14:24:15 +010036 This class is :ref:`not thread safe <asyncio-multithreading>`.
37
Victor Stinnerea3183f2013-12-03 01:08:00 +010038Run an event loop
39-----------------
40
Guido van Rossumf68afd82016-08-08 09:41:21 -070041.. method:: AbstractEventLoop.run_forever()
Victor Stinnerea3183f2013-12-03 01:08:00 +010042
Guido van Rossum41f69f42015-11-19 13:28:47 -080043 Run until :meth:`stop` is called. If :meth:`stop` is called before
44 :meth:`run_forever()` is called, this polls the I/O selector once
45 with a timeout of zero, runs all callbacks scheduled in response to
46 I/O events (and those that were already scheduled), and then exits.
47 If :meth:`stop` is called while :meth:`run_forever` is running,
48 this will run the current batch of callbacks and then exit. Note
49 that callbacks scheduled by callbacks will not run in that case;
50 they will run the next time :meth:`run_forever` is called.
51
Guido van Rossum82f9fea2015-11-19 13:33:34 -080052 .. versionchanged:: 3.5.1
Victor Stinnerea3183f2013-12-03 01:08:00 +010053
Guido van Rossumf68afd82016-08-08 09:41:21 -070054.. method:: AbstractEventLoop.run_until_complete(future)
Victor Stinnerea3183f2013-12-03 01:08:00 +010055
Victor Stinner99c2ab42013-12-03 19:17:25 +010056 Run until the :class:`Future` is done.
Victor Stinnerea3183f2013-12-03 01:08:00 +010057
Victor Stinner530ef2f2014-07-08 12:39:10 +020058 If the argument is a :ref:`coroutine object <coroutine>`, it is wrapped by
Yury Selivanov04356e12015-06-30 22:13:22 -040059 :func:`ensure_future`.
Victor Stinnerea3183f2013-12-03 01:08:00 +010060
61 Return the Future's result, or raise its exception.
62
Guido van Rossumf68afd82016-08-08 09:41:21 -070063.. method:: AbstractEventLoop.is_running()
Victor Stinnerea3183f2013-12-03 01:08:00 +010064
65 Returns running status of event loop.
66
Guido van Rossumf68afd82016-08-08 09:41:21 -070067.. method:: AbstractEventLoop.stop()
Victor Stinnerea3183f2013-12-03 01:08:00 +010068
69 Stop running the event loop.
70
Guido van Rossum41f69f42015-11-19 13:28:47 -080071 This causes :meth:`run_forever` to exit at the next suitable
72 opportunity (see there for more details).
73
Guido van Rossum82f9fea2015-11-19 13:33:34 -080074 .. versionchanged:: 3.5.1
Victor Stinnerea3183f2013-12-03 01:08:00 +010075
Guido van Rossumf68afd82016-08-08 09:41:21 -070076.. method:: AbstractEventLoop.is_closed()
Victor Stinnerbb2fc5b2014-06-10 10:23:10 +020077
78 Returns ``True`` if the event loop was closed.
79
80 .. versionadded:: 3.4.2
81
Guido van Rossumf68afd82016-08-08 09:41:21 -070082.. method:: AbstractEventLoop.close()
Victor Stinnerea3183f2013-12-03 01:08:00 +010083
Guido van Rossum41f69f42015-11-19 13:28:47 -080084 Close the event loop. The loop must not be running. Pending
85 callbacks will be lost.
Victor Stinnerea3183f2013-12-03 01:08:00 +010086
87 This clears the queues and shuts down the executor, but does not wait for
88 the executor to finish.
89
90 This is idempotent and irreversible. No other methods should be called after
91 this one.
92
Yury Selivanov03660042016-12-15 17:36:05 -050093
94.. coroutinemethod:: AbstractEventLoop.shutdown_asyncgens()
95
96 Schedule all currently open :term:`asynchronous generator` objects to
97 close with an :meth:`~agen.aclose()` call. After calling this method,
98 the event loop will issue a warning whenever a new asynchronous generator
99 is iterated. Should be used to finalize all scheduled asynchronous
100 generators reliably. Example::
101
102 try:
103 loop.run_forever()
104 finally:
105 loop.run_until_complete(loop.shutdown_asyncgens())
106 loop.close()
107
108 .. versionadded:: 3.6
109
110
Victor Stinner8464c242014-11-28 13:15:41 +0100111.. _asyncio-pass-keywords:
Victor Stinnerea3183f2013-12-03 01:08:00 +0100112
113Calls
114-----
115
Victor Stinner8464c242014-11-28 13:15:41 +0100116Most :mod:`asyncio` functions don't accept keywords. If you want to pass
117keywords to your callback, use :func:`functools.partial`. For example,
118``loop.call_soon(functools.partial(print, "Hello", flush=True))`` will call
119``print("Hello", flush=True)``.
120
121.. note::
122 :func:`functools.partial` is better than ``lambda`` functions, because
123 :mod:`asyncio` can inspect :func:`functools.partial` object to display
124 parameters in debug mode, whereas ``lambda`` functions have a poor
125 representation.
126
Guido van Rossumf68afd82016-08-08 09:41:21 -0700127.. method:: AbstractEventLoop.call_soon(callback, \*args)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100128
Victor Stinner4d5115c2014-12-15 17:50:55 +0100129 Arrange for a callback to be called as soon as possible. The callback is
130 called after :meth:`call_soon` returns, when control returns to the event
131 loop.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100132
Serhiy Storchaka4ecfa452016-05-16 09:31:54 +0300133 This operates as a :abbr:`FIFO (first-in, first-out)` queue, callbacks
134 are called in the order in which they are registered. Each callback
135 will be called exactly once.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100136
137 Any positional arguments after the callback will be passed to the
138 callback when it is called.
139
Yury Selivanov1096f762015-06-25 13:49:52 -0400140 An instance of :class:`asyncio.Handle` is returned, which can be
141 used to cancel the callback.
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500142
Victor Stinner8464c242014-11-28 13:15:41 +0100143 :ref:`Use functools.partial to pass keywords to the callback
144 <asyncio-pass-keywords>`.
145
Guido van Rossumf68afd82016-08-08 09:41:21 -0700146.. method:: AbstractEventLoop.call_soon_threadsafe(callback, \*args)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100147
148 Like :meth:`call_soon`, but thread safe.
149
Victor Stinner83704962015-02-25 14:24:15 +0100150 See the :ref:`concurrency and multithreading <asyncio-multithreading>`
151 section of the documentation.
152
Victor Stinnerea3183f2013-12-03 01:08:00 +0100153
Victor Stinner45b27ed2014-02-01 02:36:43 +0100154.. _asyncio-delayed-calls:
155
Victor Stinnerea3183f2013-12-03 01:08:00 +0100156Delayed calls
157-------------
158
159The event loop has its own internal clock for computing timeouts.
160Which clock is used depends on the (platform-specific) event loop
161implementation; ideally it is a monotonic clock. This will generally be
162a different clock than :func:`time.time`.
163
Victor Stinnerfd9d3742014-02-18 09:37:43 +0100164.. note::
165
166 Timeouts (relative *delay* or absolute *when*) should not exceed one day.
167
Victor Stinner45b27ed2014-02-01 02:36:43 +0100168
Guido van Rossumf68afd82016-08-08 09:41:21 -0700169.. method:: AbstractEventLoop.call_later(delay, callback, *args)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100170
171 Arrange for the *callback* to be called after the given *delay*
172 seconds (either an int or float).
173
Andrew Svetlov3d4dbd82018-02-01 19:59:32 +0200174 An instance of :class:`asyncio.TimerHandle` is returned, which can be
Yury Selivanov1096f762015-06-25 13:49:52 -0400175 used to cancel the callback.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100176
177 *callback* will be called exactly once per call to :meth:`call_later`.
178 If two callbacks are scheduled for exactly the same time, it is
179 undefined which will be called first.
180
181 The optional positional *args* will be passed to the callback when it
182 is called. If you want the callback to be called with some named
183 arguments, use a closure or :func:`functools.partial`.
184
Victor Stinner8464c242014-11-28 13:15:41 +0100185 :ref:`Use functools.partial to pass keywords to the callback
186 <asyncio-pass-keywords>`.
187
Guido van Rossumf68afd82016-08-08 09:41:21 -0700188.. method:: AbstractEventLoop.call_at(when, callback, *args)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100189
190 Arrange for the *callback* to be called at the given absolute timestamp
Berker Peksagb5563992014-11-07 19:51:07 +0200191 *when* (an int or float), using the same time reference as
Guido van Rossumf68afd82016-08-08 09:41:21 -0700192 :meth:`AbstractEventLoop.time`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100193
194 This method's behavior is the same as :meth:`call_later`.
195
Andrew Svetlov3d4dbd82018-02-01 19:59:32 +0200196 An instance of :class:`asyncio.TimerHandle` is returned, which can be
Yury Selivanov1096f762015-06-25 13:49:52 -0400197 used to cancel the callback.
198
Victor Stinner8464c242014-11-28 13:15:41 +0100199 :ref:`Use functools.partial to pass keywords to the callback
200 <asyncio-pass-keywords>`.
201
Guido van Rossumf68afd82016-08-08 09:41:21 -0700202.. method:: AbstractEventLoop.time()
Victor Stinnerea3183f2013-12-03 01:08:00 +0100203
204 Return the current time, as a :class:`float` value, according to the
205 event loop's internal clock.
206
Victor Stinner3e09e322013-12-03 01:22:06 +0100207.. seealso::
208
209 The :func:`asyncio.sleep` function.
210
Victor Stinnerea3183f2013-12-03 01:08:00 +0100211
Yury Selivanov950204d2016-05-16 16:23:00 -0400212Futures
213-------
214
Guido van Rossumf68afd82016-08-08 09:41:21 -0700215.. method:: AbstractEventLoop.create_future()
Yury Selivanov950204d2016-05-16 16:23:00 -0400216
217 Create an :class:`asyncio.Future` object attached to the loop.
218
219 This is a preferred way to create futures in asyncio, as event
220 loop implementations can provide alternative implementations
221 of the Future class (with better performance or instrumentation).
222
223 .. versionadded:: 3.5.2
224
225
Yury Selivanovbb961342015-06-25 11:54:34 -0400226Tasks
227-----
Victor Stinner530ef2f2014-07-08 12:39:10 +0200228
Guido van Rossumf68afd82016-08-08 09:41:21 -0700229.. method:: AbstractEventLoop.create_task(coro)
Victor Stinner530ef2f2014-07-08 12:39:10 +0200230
231 Schedule the execution of a :ref:`coroutine object <coroutine>`: wrap it in
232 a future. Return a :class:`Task` object.
233
234 Third-party event loops can use their own subclass of :class:`Task` for
235 interoperability. In this case, the result type is a subclass of
236 :class:`Task`.
237
Victor Stinner530ef2f2014-07-08 12:39:10 +0200238 .. versionadded:: 3.4.2
239
Guido van Rossumf68afd82016-08-08 09:41:21 -0700240.. method:: AbstractEventLoop.set_task_factory(factory)
Yury Selivanov71854612015-05-11 16:28:27 -0400241
242 Set a task factory that will be used by
Guido van Rossumf68afd82016-08-08 09:41:21 -0700243 :meth:`AbstractEventLoop.create_task`.
Yury Selivanov71854612015-05-11 16:28:27 -0400244
245 If *factory* is ``None`` the default task factory will be set.
246
247 If *factory* is a *callable*, it should have a signature matching
248 ``(loop, coro)``, where *loop* will be a reference to the active
249 event loop, *coro* will be a coroutine object. The callable
250 must return an :class:`asyncio.Future` compatible object.
251
252 .. versionadded:: 3.4.4
253
Guido van Rossumf68afd82016-08-08 09:41:21 -0700254.. method:: AbstractEventLoop.get_task_factory()
Yury Selivanov71854612015-05-11 16:28:27 -0400255
256 Return a task factory, or ``None`` if the default one is in use.
257
258 .. versionadded:: 3.4.4
259
Victor Stinner530ef2f2014-07-08 12:39:10 +0200260
Victor Stinnerea3183f2013-12-03 01:08:00 +0100261Creating connections
Victor Stinner0c6f1ca2013-12-03 01:46:39 +0100262--------------------
Victor Stinnerea3183f2013-12-03 01:08:00 +0100263
Andrew Svetlov51eb1c62017-12-20 20:24:43 +0200264.. coroutinemethod:: AbstractEventLoop.create_connection(protocol_factory, host=None, port=None, \*, ssl=None, family=0, proto=0, flags=0, sock=None, local_addr=None, server_hostname=None, ssl_handshake_timeout=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100265
266 Create a streaming transport connection to a given Internet *host* and
Victor Stinnera6919aa2014-02-19 13:32:34 +0100267 *port*: socket family :py:data:`~socket.AF_INET` or
268 :py:data:`~socket.AF_INET6` depending on *host* (or *family* if specified),
269 socket type :py:data:`~socket.SOCK_STREAM`. *protocol_factory* must be a
270 callable returning a :ref:`protocol <asyncio-protocol>` instance.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100271
Yury Selivanov19a44f62017-12-14 20:53:26 -0500272 This method will try to establish the connection in the background.
273 When successful, it returns a ``(transport, protocol)`` pair.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100274
275 The chronological synopsis of the underlying operation is as follows:
276
Victor Stinner9592edb2014-02-02 15:03:02 +0100277 #. The connection is established, and a :ref:`transport <asyncio-transport>`
Victor Stinnerea3183f2013-12-03 01:08:00 +0100278 is created to represent it.
279
280 #. *protocol_factory* is called without arguments and must return a
Victor Stinner9592edb2014-02-02 15:03:02 +0100281 :ref:`protocol <asyncio-protocol>` instance.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100282
283 #. The protocol instance is tied to the transport, and its
284 :meth:`connection_made` method is called.
285
286 #. The coroutine returns successfully with the ``(transport, protocol)``
287 pair.
288
289 The created transport is an implementation-dependent bidirectional stream.
290
291 .. note::
292 *protocol_factory* can be any kind of callable, not necessarily
293 a class. For example, if you want to use a pre-created
294 protocol instance, you can pass ``lambda: my_protocol``.
295
Martin Panterc04fb562016-02-10 05:44:01 +0000296 Options that change how the connection is created:
Victor Stinnerea3183f2013-12-03 01:08:00 +0100297
298 * *ssl*: if given and not false, a SSL/TLS transport is created
299 (by default a plain TCP transport is created). If *ssl* is
300 a :class:`ssl.SSLContext` object, this context is used to create
301 the transport; if *ssl* is :const:`True`, a context with some
302 unspecified default settings is used.
303
Berker Peksag9c1dba22014-09-28 00:00:58 +0300304 .. seealso:: :ref:`SSL/TLS security considerations <ssl-security>`
Antoine Pitrouc5e075f2014-03-22 18:19:11 +0100305
Victor Stinnerea3183f2013-12-03 01:08:00 +0100306 * *server_hostname*, is only for use together with *ssl*,
307 and sets or overrides the hostname that the target server's certificate
308 will be matched against. By default the value of the *host* argument
309 is used. If *host* is empty, there is no default and you must pass a
310 value for *server_hostname*. If *server_hostname* is an empty
311 string, hostname matching is disabled (which is a serious security
312 risk, allowing for man-in-the-middle-attacks).
313
314 * *family*, *proto*, *flags* are the optional address family, protocol
315 and flags to be passed through to getaddrinfo() for *host* resolution.
316 If given, these should all be integers from the corresponding
317 :mod:`socket` module constants.
318
319 * *sock*, if given, should be an existing, already connected
320 :class:`socket.socket` object to be used by the transport.
321 If *sock* is given, none of *host*, *port*, *family*, *proto*, *flags*
322 and *local_addr* should be specified.
323
324 * *local_addr*, if given, is a ``(local_host, local_port)`` tuple used
325 to bind the socket to locally. The *local_host* and *local_port*
326 are looked up using getaddrinfo(), similarly to *host* and *port*.
327
Neil Aspinallf7686c12017-12-19 19:45:42 +0000328 * *ssl_handshake_timeout* is (for an SSL connection) the time in seconds
329 to wait for the SSL handshake to complete before aborting the connection.
Andrew Svetlov51eb1c62017-12-20 20:24:43 +0200330 ``10.0`` seconds if ``None`` (default).
Neil Aspinallf7686c12017-12-19 19:45:42 +0000331
332 .. versionadded:: 3.7
333
334 The *ssl_handshake_timeout* parameter.
335
Victor Stinner60208a12015-09-15 22:41:52 +0200336 .. versionchanged:: 3.5
337
338 On Windows with :class:`ProactorEventLoop`, SSL/TLS is now supported.
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200339
Victor Stinnerc8ea8132014-01-23 11:02:09 +0100340 .. seealso::
341
342 The :func:`open_connection` function can be used to get a pair of
343 (:class:`StreamReader`, :class:`StreamWriter`) instead of a protocol.
344
Victor Stinnerea3183f2013-12-03 01:08:00 +0100345
Guido van Rossumf68afd82016-08-08 09:41:21 -0700346.. coroutinemethod:: AbstractEventLoop.create_datagram_endpoint(protocol_factory, local_addr=None, remote_addr=None, \*, family=0, proto=0, flags=0, reuse_address=None, reuse_port=None, allow_broadcast=None, sock=None)
Victor Stinnera6919aa2014-02-19 13:32:34 +0100347
Quentin Dawansfe4ea9c2017-10-30 14:43:02 +0100348 Create datagram connection: socket family :py:data:`~socket.AF_INET`,
349 :py:data:`~socket.AF_INET6` or :py:data:`~socket.AF_UNIX` depending on
350 *host* (or *family* if specified), socket type
351 :py:data:`~socket.SOCK_DGRAM`. *protocol_factory* must be a
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700352 callable returning a :ref:`protocol <asyncio-protocol>` instance.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100353
Yury Selivanov19a44f62017-12-14 20:53:26 -0500354 This method will try to establish the connection in the background.
355 When successful, the it returns a ``(transport, protocol)`` pair.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100356
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700357 Options changing how the connection is created:
358
359 * *local_addr*, if given, is a ``(local_host, local_port)`` tuple used
360 to bind the socket to locally. The *local_host* and *local_port*
361 are looked up using :meth:`getaddrinfo`.
362
363 * *remote_addr*, if given, is a ``(remote_host, remote_port)`` tuple used
364 to connect the socket to a remote address. The *remote_host* and
365 *remote_port* are looked up using :meth:`getaddrinfo`.
366
367 * *family*, *proto*, *flags* are the optional address family, protocol
368 and flags to be passed through to :meth:`getaddrinfo` for *host*
369 resolution. If given, these should all be integers from the
370 corresponding :mod:`socket` module constants.
371
372 * *reuse_address* tells the kernel to reuse a local socket in
373 TIME_WAIT state, without waiting for its natural timeout to
Serhiy Storchaka4adf01c2016-10-19 18:30:05 +0300374 expire. If not specified will automatically be set to ``True`` on
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700375 UNIX.
376
377 * *reuse_port* tells the kernel to allow this endpoint to be bound to the
378 same port as other existing endpoints are bound to, so long as they all
379 set this flag when being created. This option is not supported on Windows
380 and some UNIX's. If the :py:data:`~socket.SO_REUSEPORT` constant is not
381 defined then this capability is unsupported.
382
383 * *allow_broadcast* tells the kernel to allow this endpoint to send
384 messages to the broadcast address.
385
386 * *sock* can optionally be specified in order to use a preexisting,
387 already connected, :class:`socket.socket` object to be used by the
388 transport. If specified, *local_addr* and *remote_addr* should be omitted
389 (must be :const:`None`).
Victor Stinnera6919aa2014-02-19 13:32:34 +0100390
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200391 On Windows with :class:`ProactorEventLoop`, this method is not supported.
392
Victor Stinnerc7edffd2014-10-12 11:24:26 +0200393 See :ref:`UDP echo client protocol <asyncio-udp-echo-client-protocol>` and
394 :ref:`UDP echo server protocol <asyncio-udp-echo-server-protocol>` examples.
395
Victor Stinnera6919aa2014-02-19 13:32:34 +0100396
Andrew Svetlov51eb1c62017-12-20 20:24:43 +0200397.. coroutinemethod:: AbstractEventLoop.create_unix_connection(protocol_factory, path=None, \*, ssl=None, sock=None, server_hostname=None, ssl_handshake_timeout=None)
Victor Stinnera6919aa2014-02-19 13:32:34 +0100398
399 Create UNIX connection: socket family :py:data:`~socket.AF_UNIX`, socket
400 type :py:data:`~socket.SOCK_STREAM`. The :py:data:`~socket.AF_UNIX` socket
401 family is used to communicate between processes on the same machine
402 efficiently.
403
Yury Selivanov19a44f62017-12-14 20:53:26 -0500404 This method will try to establish the connection in the background.
405 When successful, the it returns a ``(transport, protocol)`` pair.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100406
Guido van Rossum9e80eeb2016-11-03 14:17:25 -0700407 *path* is the name of a UNIX domain socket, and is required unless a *sock*
Yury Selivanov423fd362017-11-20 17:26:28 -0500408 parameter is specified. Abstract UNIX sockets, :class:`str`,
409 :class:`bytes`, and :class:`~pathlib.Path` paths are supported.
Guido van Rossum9e80eeb2016-11-03 14:17:25 -0700410
Guido van Rossumf68afd82016-08-08 09:41:21 -0700411 See the :meth:`AbstractEventLoop.create_connection` method for parameters.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100412
413 Availability: UNIX.
414
Neil Aspinallf7686c12017-12-19 19:45:42 +0000415 .. versionadded:: 3.7
416
417 The *ssl_handshake_timeout* parameter.
418
Yury Selivanov423fd362017-11-20 17:26:28 -0500419 .. versionchanged:: 3.7
420
421 The *path* parameter can now be a :class:`~pathlib.Path` object.
422
Victor Stinnera6919aa2014-02-19 13:32:34 +0100423
Victor Stinnerea3183f2013-12-03 01:08:00 +0100424Creating listening connections
425------------------------------
426
Yury Selivanovc9070d02018-01-25 18:08:09 -0500427.. coroutinemethod:: AbstractEventLoop.create_server(protocol_factory, host=None, port=None, \*, family=socket.AF_UNSPEC, flags=socket.AI_PASSIVE, sock=None, backlog=100, ssl=None, reuse_address=None, reuse_port=None, ssl_handshake_timeout=None, start_serving=True)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100428
Victor Stinner33f6abe2014-10-12 20:36:04 +0200429 Create a TCP server (socket type :data:`~socket.SOCK_STREAM`) bound to
430 *host* and *port*.
431
432 Return a :class:`Server` object, its :attr:`~Server.sockets` attribute
433 contains created sockets. Use the :meth:`Server.close` method to stop the
434 server: close listening sockets.
435
436 Parameters:
437
Victor Stinner5e4a7d82015-09-21 18:33:43 +0200438 * The *host* parameter can be a string, in that case the TCP server is
439 bound to *host* and *port*. The *host* parameter can also be a sequence
440 of strings and in that case the TCP server is bound to all hosts of the
441 sequence. If *host* is an empty string or ``None``, all interfaces are
442 assumed and a list of multiple sockets will be returned (most likely one
443 for IPv4 and another one for IPv6).
Victor Stinner33f6abe2014-10-12 20:36:04 +0200444
445 * *family* can be set to either :data:`socket.AF_INET` or
446 :data:`~socket.AF_INET6` to force the socket to use IPv4 or IPv6. If not set
447 it will be determined from host (defaults to :data:`socket.AF_UNSPEC`).
448
449 * *flags* is a bitmask for :meth:`getaddrinfo`.
450
451 * *sock* can optionally be specified in order to use a preexisting
452 socket object. If specified, *host* and *port* should be omitted (must be
453 :const:`None`).
454
455 * *backlog* is the maximum number of queued connections passed to
456 :meth:`~socket.socket.listen` (defaults to 100).
457
458 * *ssl* can be set to an :class:`~ssl.SSLContext` to enable SSL over the
459 accepted connections.
460
461 * *reuse_address* tells the kernel to reuse a local socket in
462 TIME_WAIT state, without waiting for its natural timeout to
Serhiy Storchaka4adf01c2016-10-19 18:30:05 +0300463 expire. If not specified will automatically be set to ``True`` on
Victor Stinner33f6abe2014-10-12 20:36:04 +0200464 UNIX.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100465
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700466 * *reuse_port* tells the kernel to allow this endpoint to be bound to the
467 same port as other existing endpoints are bound to, so long as they all
468 set this flag when being created. This option is not supported on
469 Windows.
470
Neil Aspinallf7686c12017-12-19 19:45:42 +0000471 * *ssl_handshake_timeout* is (for an SSL server) the time in seconds to wait
472 for the SSL handshake to complete before aborting the connection.
Andrew Svetlov51eb1c62017-12-20 20:24:43 +0200473 ``10.0`` seconds if ``None`` (default).
Neil Aspinallf7686c12017-12-19 19:45:42 +0000474
Yury Selivanovc9070d02018-01-25 18:08:09 -0500475 * *start_serving* set to ``True`` (the default) causes the created server
476 to start accepting connections immediately. When set to ``False``,
477 the user should await on :meth:`Server.start_serving` or
478 :meth:`Server.serve_forever` to make the server to start accepting
479 connections.
480
Neil Aspinallf7686c12017-12-19 19:45:42 +0000481 .. versionadded:: 3.7
482
Yury Selivanovc9070d02018-01-25 18:08:09 -0500483 *ssl_handshake_timeout* and *start_serving* parameters.
Neil Aspinallf7686c12017-12-19 19:45:42 +0000484
Victor Stinner60208a12015-09-15 22:41:52 +0200485 .. versionchanged:: 3.5
486
487 On Windows with :class:`ProactorEventLoop`, SSL/TLS is now supported.
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200488
Victor Stinnerc8ea8132014-01-23 11:02:09 +0100489 .. seealso::
490
491 The function :func:`start_server` creates a (:class:`StreamReader`,
492 :class:`StreamWriter`) pair and calls back a function with this pair.
493
Victor Stinner7b58a2b2015-09-21 18:41:05 +0200494 .. versionchanged:: 3.5.1
Victor Stinner5e4a7d82015-09-21 18:33:43 +0200495
496 The *host* parameter can now be a sequence of strings.
497
Victor Stinnerea3183f2013-12-03 01:08:00 +0100498
Yury Selivanovc9070d02018-01-25 18:08:09 -0500499.. coroutinemethod:: AbstractEventLoop.create_unix_server(protocol_factory, path=None, \*, sock=None, backlog=100, ssl=None, ssl_handshake_timeout=None, start_serving=True)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100500
Guido van Rossumf68afd82016-08-08 09:41:21 -0700501 Similar to :meth:`AbstractEventLoop.create_server`, but specific to the
Victor Stinnera6919aa2014-02-19 13:32:34 +0100502 socket family :py:data:`~socket.AF_UNIX`.
503
Yury Selivanov423fd362017-11-20 17:26:28 -0500504 *path* is the name of a UNIX domain socket, and is required unless a *sock*
505 parameter is specified. Abstract UNIX sockets, :class:`str`,
506 :class:`bytes`, and :class:`~pathlib.Path` paths are supported.
507
Victor Stinnera6919aa2014-02-19 13:32:34 +0100508 Availability: UNIX.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100509
Neil Aspinallf7686c12017-12-19 19:45:42 +0000510 .. versionadded:: 3.7
511
512 The *ssl_handshake_timeout* parameter.
513
Yury Selivanov423fd362017-11-20 17:26:28 -0500514 .. versionchanged:: 3.7
515
516 The *path* parameter can now be a :class:`~pathlib.Path` object.
517
Andrew Svetlov51eb1c62017-12-20 20:24:43 +0200518.. coroutinemethod:: BaseEventLoop.connect_accepted_socket(protocol_factory, sock, \*, ssl=None, ssl_handshake_timeout=None)
Yury Selivanov3b3a1412016-11-07 15:35:25 -0500519
520 Handle an accepted connection.
521
522 This is used by servers that accept connections outside of
523 asyncio but that use asyncio to handle them.
524
525 Parameters:
526
527 * *sock* is a preexisting socket object returned from an ``accept``
528 call.
529
530 * *ssl* can be set to an :class:`~ssl.SSLContext` to enable SSL over the
531 accepted connections.
532
Neil Aspinallf7686c12017-12-19 19:45:42 +0000533 * *ssl_handshake_timeout* is (for an SSL connection) the time in seconds to
534 wait for the SSL handshake to complete before aborting the connection.
Andrew Svetlov51eb1c62017-12-20 20:24:43 +0200535 ``10.0`` seconds if ``None`` (default).
Neil Aspinallf7686c12017-12-19 19:45:42 +0000536
Yury Selivanov19a44f62017-12-14 20:53:26 -0500537 When completed it returns a ``(transport, protocol)`` pair.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100538
Neil Aspinallf7686c12017-12-19 19:45:42 +0000539 .. versionadded:: 3.7
540
541 The *ssl_handshake_timeout* parameter.
542
AraHaan431665b2017-11-21 11:06:26 -0500543 .. versionadded:: 3.5.3
544
545
Andrew Svetlov7c684072018-01-27 21:22:47 +0200546File Transferring
547-----------------
548
Elvis Pranskevichusee72ac02018-01-27 17:11:10 -0500549.. coroutinemethod:: AbstractEventLoop.sendfile(transport, file, \
Andrew Svetlov7c684072018-01-27 21:22:47 +0200550 offset=0, count=None, \
551 *, fallback=True)
552
553 Send a *file* to *transport*, return the total number of bytes
554 which were sent.
555
556 The method uses high-performance :meth:`os.sendfile` if available.
557
558 *file* must be a regular file object opened in binary mode.
559
560 *offset* tells from where to start reading the file. If specified,
561 *count* is the total number of bytes to transmit as opposed to
562 sending the file until EOF is reached. File position is updated on
563 return or also in case of error in which case :meth:`file.tell()
564 <io.IOBase.tell>` can be used to figure out the number of bytes
565 which were sent.
566
567 *fallback* set to ``True`` makes asyncio to manually read and send
568 the file when the platform does not support the sendfile syscall
569 (e.g. Windows or SSL socket on Unix).
570
571 Raise :exc:`SendfileNotAvailableError` if the system does not support
572 *sendfile* syscall and *fallback* is ``False``.
573
574 .. versionadded:: 3.7
575
576
Yury Selivanovf111b3d2017-12-30 00:35:36 -0500577TLS Upgrade
578-----------
579
580.. coroutinemethod:: AbstractEventLoop.start_tls(transport, protocol, sslcontext, \*, server_side=False, server_hostname=None, ssl_handshake_timeout=None)
581
582 Upgrades an existing connection to TLS.
583
584 Returns a new transport instance, that the *protocol* must start using
585 immediately after the *await*. The *transport* instance passed to
586 the *start_tls* method should never be used again.
587
588 Parameters:
589
590 * *transport* and *protocol* instances that methods like
591 :meth:`~AbstractEventLoop.create_server` and
592 :meth:`~AbstractEventLoop.create_connection` return.
593
594 * *sslcontext*: a configured instance of :class:`~ssl.SSLContext`.
595
596 * *server_side* pass ``True`` when a server-side connection is being
597 upgraded (like the one created by :meth:`~AbstractEventLoop.create_server`).
598
599 * *server_hostname*: sets or overrides the host name that the target
600 server's certificate will be matched against.
601
602 * *ssl_handshake_timeout* is (for an SSL connection) the time in seconds to
603 wait for the SSL handshake to complete before aborting the connection.
604 ``10.0`` seconds if ``None`` (default).
605
606 .. versionadded:: 3.7
607
608
Victor Stinnerc1567df2014-02-08 23:22:58 +0100609Watch file descriptors
610----------------------
611
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200612On Windows with :class:`SelectorEventLoop`, only socket handles are supported
613(ex: pipe file descriptors are not supported).
614
615On Windows with :class:`ProactorEventLoop`, these methods are not supported.
616
Guido van Rossumf68afd82016-08-08 09:41:21 -0700617.. method:: AbstractEventLoop.add_reader(fd, callback, \*args)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100618
619 Start watching the file descriptor for read availability and then call the
620 *callback* with specified arguments.
621
Victor Stinner8464c242014-11-28 13:15:41 +0100622 :ref:`Use functools.partial to pass keywords to the callback
623 <asyncio-pass-keywords>`.
624
Guido van Rossumf68afd82016-08-08 09:41:21 -0700625.. method:: AbstractEventLoop.remove_reader(fd)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100626
627 Stop watching the file descriptor for read availability.
628
Guido van Rossumf68afd82016-08-08 09:41:21 -0700629.. method:: AbstractEventLoop.add_writer(fd, callback, \*args)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100630
631 Start watching the file descriptor for write availability and then call the
632 *callback* with specified arguments.
633
Victor Stinner8464c242014-11-28 13:15:41 +0100634 :ref:`Use functools.partial to pass keywords to the callback
635 <asyncio-pass-keywords>`.
636
Guido van Rossumf68afd82016-08-08 09:41:21 -0700637.. method:: AbstractEventLoop.remove_writer(fd)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100638
639 Stop watching the file descriptor for write availability.
640
Victor Stinner04e6df32014-10-11 16:16:27 +0200641The :ref:`watch a file descriptor for read events <asyncio-watch-read-event>`
Guido van Rossumf68afd82016-08-08 09:41:21 -0700642example uses the low-level :meth:`AbstractEventLoop.add_reader` method to register
Victor Stinner04e6df32014-10-11 16:16:27 +0200643the file descriptor of a socket.
644
Victor Stinnerc1567df2014-02-08 23:22:58 +0100645
646Low-level socket operations
647---------------------------
648
Guido van Rossumf68afd82016-08-08 09:41:21 -0700649.. coroutinemethod:: AbstractEventLoop.sock_recv(sock, nbytes)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100650
Yury Selivanov55c50842016-06-08 12:48:15 -0400651 Receive data from the socket. Modeled after blocking
652 :meth:`socket.socket.recv` method.
653
654 The return value is a bytes object
Victor Stinnerc1567df2014-02-08 23:22:58 +0100655 representing the data received. The maximum amount of data to be received
656 at once is specified by *nbytes*.
657
Victor Stinnerd84fd732014-08-26 01:01:59 +0200658 With :class:`SelectorEventLoop` event loop, the socket *sock* must be
659 non-blocking.
Victor Stinnerec2ce092014-07-29 23:12:22 +0200660
Yury Selivanov19a44f62017-12-14 20:53:26 -0500661 .. versionchanged:: 3.7
662 Even though the method was always documented as a coroutine
663 method, before Python 3.7 it returned a :class:`Future`.
664 Since Python 3.7, this is an ``async def`` method.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100665
Antoine Pitrou525f40d2017-10-19 21:46:40 +0200666.. coroutinemethod:: AbstractEventLoop.sock_recv_into(sock, buf)
667
668 Receive data from the socket. Modeled after blocking
669 :meth:`socket.socket.recv_into` method.
670
671 The received data is written into *buf* (a writable buffer).
672 The return value is the number of bytes written.
673
674 With :class:`SelectorEventLoop` event loop, the socket *sock* must be
675 non-blocking.
676
Antoine Pitrou525f40d2017-10-19 21:46:40 +0200677 .. versionadded:: 3.7
678
Guido van Rossumf68afd82016-08-08 09:41:21 -0700679.. coroutinemethod:: AbstractEventLoop.sock_sendall(sock, data)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100680
Yury Selivanov55c50842016-06-08 12:48:15 -0400681 Send data to the socket. Modeled after blocking
682 :meth:`socket.socket.sendall` method.
683
684 The socket must be connected to a remote socket.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100685 This method continues to send data from *data* until either all data has
686 been sent or an error occurs. ``None`` is returned on success. On error,
687 an exception is raised, and there is no way to determine how much data, if
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500688 any, was successfully processed by the receiving end of the connection.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100689
Victor Stinnerd84fd732014-08-26 01:01:59 +0200690 With :class:`SelectorEventLoop` event loop, the socket *sock* must be
691 non-blocking.
Victor Stinnerec2ce092014-07-29 23:12:22 +0200692
Yury Selivanov19a44f62017-12-14 20:53:26 -0500693 .. versionchanged:: 3.7
694 Even though the method was always documented as a coroutine
695 method, before Python 3.7 it returned an :class:`Future`.
696 Since Python 3.7, this is an ``async def`` method.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100697
Guido van Rossumf68afd82016-08-08 09:41:21 -0700698.. coroutinemethod:: AbstractEventLoop.sock_connect(sock, address)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100699
Yury Selivanov55c50842016-06-08 12:48:15 -0400700 Connect to a remote socket at *address*. Modeled after
701 blocking :meth:`socket.socket.connect` method.
Victor Stinner1b0580b2014-02-13 09:24:37 +0100702
Victor Stinnerd84fd732014-08-26 01:01:59 +0200703 With :class:`SelectorEventLoop` event loop, the socket *sock* must be
704 non-blocking.
Victor Stinnerec2ce092014-07-29 23:12:22 +0200705
Yury Selivanov55c50842016-06-08 12:48:15 -0400706 .. versionchanged:: 3.5.2
707 ``address`` no longer needs to be resolved. ``sock_connect``
708 will try to check if the *address* is already resolved by calling
709 :func:`socket.inet_pton`. If not,
Guido van Rossumf68afd82016-08-08 09:41:21 -0700710 :meth:`AbstractEventLoop.getaddrinfo` will be used to resolve the
Yury Selivanov55c50842016-06-08 12:48:15 -0400711 *address*.
712
Victor Stinnerc1567df2014-02-08 23:22:58 +0100713 .. seealso::
714
Guido van Rossumf68afd82016-08-08 09:41:21 -0700715 :meth:`AbstractEventLoop.create_connection`
Yury Selivanov55c50842016-06-08 12:48:15 -0400716 and :func:`asyncio.open_connection() <open_connection>`.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100717
718
Guido van Rossumf68afd82016-08-08 09:41:21 -0700719.. coroutinemethod:: AbstractEventLoop.sock_accept(sock)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100720
Yury Selivanov55c50842016-06-08 12:48:15 -0400721 Accept a connection. Modeled after blocking
722 :meth:`socket.socket.accept`.
723
724 The socket must be bound to an address and listening
Victor Stinnerc1567df2014-02-08 23:22:58 +0100725 for connections. The return value is a pair ``(conn, address)`` where *conn*
726 is a *new* socket object usable to send and receive data on the connection,
727 and *address* is the address bound to the socket on the other end of the
728 connection.
729
Victor Stinnerec2ce092014-07-29 23:12:22 +0200730 The socket *sock* must be non-blocking.
731
Yury Selivanov19a44f62017-12-14 20:53:26 -0500732 .. versionchanged:: 3.7
733 Even though the method was always documented as a coroutine
734 method, before Python 3.7 it returned a :class:`Future`.
735 Since Python 3.7, this is an ``async def`` method.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100736
737 .. seealso::
738
Guido van Rossumf68afd82016-08-08 09:41:21 -0700739 :meth:`AbstractEventLoop.create_server` and :func:`start_server`.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100740
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200741.. coroutinemethod:: AbstractEventLoop.sock_sendfile(sock, file, \
742 offset=0, count=None, \
743 *, fallback=True)
744
745 Send a file using high-performance :mod:`os.sendfile` if possible
746 and return the total number of bytes which were sent.
747
748 Asynchronous version of :meth:`socket.socket.sendfile`.
749
750 *sock* must be non-blocking :class:`~socket.socket` of
751 :const:`socket.SOCK_STREAM` type.
752
753 *file* must be a regular file object opened in binary mode.
754
755 *offset* tells from where to start reading the file. If specified,
756 *count* is the total number of bytes to transmit as opposed to
757 sending the file until EOF is reached. File position is updated on
758 return or also in case of error in which case :meth:`file.tell()
759 <io.IOBase.tell>` can be used to figure out the number of bytes
760 which were sent.
761
762 *fallback* set to ``True`` makes asyncio to manually read and send
763 the file when the platform does not support the sendfile syscall
764 (e.g. Windows or SSL socket on Unix).
765
Andrew Svetlov7464e872018-01-19 20:04:29 +0200766 Raise :exc:`SendfileNotAvailableError` if the system does not support
Andrew Svetlov6b5a2792018-01-16 19:59:34 +0200767 *sendfile* syscall and *fallback* is ``False``.
768
769 .. versionadded:: 3.7
770
Victor Stinnerc1567df2014-02-08 23:22:58 +0100771
772Resolve host name
773-----------------
Victor Stinnerea3183f2013-12-03 01:08:00 +0100774
Guido van Rossumf68afd82016-08-08 09:41:21 -0700775.. coroutinemethod:: AbstractEventLoop.getaddrinfo(host, port, \*, family=0, type=0, proto=0, flags=0)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100776
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500777 This method is a :ref:`coroutine <coroutine>`, similar to
778 :meth:`socket.getaddrinfo` function but non-blocking.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100779
Guido van Rossumf68afd82016-08-08 09:41:21 -0700780.. coroutinemethod:: AbstractEventLoop.getnameinfo(sockaddr, flags=0)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100781
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500782 This method is a :ref:`coroutine <coroutine>`, similar to
783 :meth:`socket.getnameinfo` function but non-blocking.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100784
Yury Selivanovbec23722018-01-28 14:09:40 -0500785.. versionchanged:: 3.7
786 Both *getaddrinfo* and *getnameinfo* methods were always documented
787 to return a coroutine, but prior to Python 3.7 they were, in fact,
788 returning :class:`asyncio.Future` objects. Starting with Python 3.7
789 both methods are coroutines.
790
Victor Stinnerea3183f2013-12-03 01:08:00 +0100791
Victor Stinner984600f2014-03-25 09:40:26 +0100792Connect pipes
793-------------
Victor Stinnerea3183f2013-12-03 01:08:00 +0100794
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200795On Windows with :class:`SelectorEventLoop`, these methods are not supported.
796Use :class:`ProactorEventLoop` to support pipes on Windows.
797
Guido van Rossumf68afd82016-08-08 09:41:21 -0700798.. coroutinemethod:: AbstractEventLoop.connect_read_pipe(protocol_factory, pipe)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100799
Victor Stinnerd84fd732014-08-26 01:01:59 +0200800 Register read pipe in eventloop.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100801
802 *protocol_factory* should instantiate object with :class:`Protocol`
Victor Stinnera5b257a2014-05-29 00:14:03 +0200803 interface. *pipe* is a :term:`file-like object <file object>`.
804 Return pair ``(transport, protocol)``, where *transport* supports the
Victor Stinnerea3183f2013-12-03 01:08:00 +0100805 :class:`ReadTransport` interface.
806
Victor Stinnerd84fd732014-08-26 01:01:59 +0200807 With :class:`SelectorEventLoop` event loop, the *pipe* is set to
808 non-blocking mode.
809
Guido van Rossumf68afd82016-08-08 09:41:21 -0700810.. coroutinemethod:: AbstractEventLoop.connect_write_pipe(protocol_factory, pipe)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100811
812 Register write pipe in eventloop.
813
814 *protocol_factory* should instantiate object with :class:`BaseProtocol`
Victor Stinner2cef3002014-10-23 22:38:46 +0200815 interface. *pipe* is :term:`file-like object <file object>`.
816 Return pair ``(transport, protocol)``, where *transport* supports
Victor Stinnerea3183f2013-12-03 01:08:00 +0100817 :class:`WriteTransport` interface.
818
Victor Stinnerd84fd732014-08-26 01:01:59 +0200819 With :class:`SelectorEventLoop` event loop, the *pipe* is set to
820 non-blocking mode.
821
Victor Stinner08444382014-02-02 22:43:39 +0100822.. seealso::
823
Guido van Rossumf68afd82016-08-08 09:41:21 -0700824 The :meth:`AbstractEventLoop.subprocess_exec` and
825 :meth:`AbstractEventLoop.subprocess_shell` methods.
Victor Stinner08444382014-02-02 22:43:39 +0100826
Victor Stinnerea3183f2013-12-03 01:08:00 +0100827
Victor Stinner8b863482014-01-27 10:07:50 +0100828UNIX signals
829------------
830
831Availability: UNIX only.
832
Guido van Rossumf68afd82016-08-08 09:41:21 -0700833.. method:: AbstractEventLoop.add_signal_handler(signum, callback, \*args)
Victor Stinner8b863482014-01-27 10:07:50 +0100834
835 Add a handler for a signal.
836
837 Raise :exc:`ValueError` if the signal number is invalid or uncatchable.
838 Raise :exc:`RuntimeError` if there is a problem setting up the handler.
839
Victor Stinner8464c242014-11-28 13:15:41 +0100840 :ref:`Use functools.partial to pass keywords to the callback
841 <asyncio-pass-keywords>`.
842
Guido van Rossumf68afd82016-08-08 09:41:21 -0700843.. method:: AbstractEventLoop.remove_signal_handler(sig)
Victor Stinner8b863482014-01-27 10:07:50 +0100844
845 Remove a handler for a signal.
846
847 Return ``True`` if a signal handler was removed, ``False`` if not.
848
849.. seealso::
850
851 The :mod:`signal` module.
852
853
Victor Stinnerea3183f2013-12-03 01:08:00 +0100854Executor
855--------
856
857Call a function in an :class:`~concurrent.futures.Executor` (pool of threads or
858pool of processes). By default, an event loop uses a thread pool executor
859(:class:`~concurrent.futures.ThreadPoolExecutor`).
860
Yury Selivanovbec23722018-01-28 14:09:40 -0500861.. method:: AbstractEventLoop.run_in_executor(executor, func, \*args)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100862
Andrew Svetlov1c62b522015-10-01 09:48:08 +0300863 Arrange for a *func* to be called in the specified executor.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100864
Larry Hastings3732ed22014-03-15 21:13:56 -0700865 The *executor* argument should be an :class:`~concurrent.futures.Executor`
866 instance. The default executor is used if *executor* is ``None``.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100867
Andrew Svetlov1c62b522015-10-01 09:48:08 +0300868 :ref:`Use functools.partial to pass keywords to the *func*
Victor Stinner8464c242014-11-28 13:15:41 +0100869 <asyncio-pass-keywords>`.
870
Yury Selivanovbec23722018-01-28 14:09:40 -0500871 This method returns a :class:`asyncio.Future` object.
872
Yury Selivanove8a60452016-10-21 17:40:42 -0400873 .. versionchanged:: 3.5.3
874 :meth:`BaseEventLoop.run_in_executor` no longer configures the
875 ``max_workers`` of the thread pool executor it creates, instead
876 leaving it up to the thread pool executor
877 (:class:`~concurrent.futures.ThreadPoolExecutor`) to set the
878 default.
879
Guido van Rossumf68afd82016-08-08 09:41:21 -0700880.. method:: AbstractEventLoop.set_default_executor(executor)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100881
882 Set the default executor used by :meth:`run_in_executor`.
883
884
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500885Error Handling API
886------------------
887
Martin Panterc04fb562016-02-10 05:44:01 +0000888Allows customizing how exceptions are handled in the event loop.
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500889
Guido van Rossumf68afd82016-08-08 09:41:21 -0700890.. method:: AbstractEventLoop.set_exception_handler(handler)
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500891
892 Set *handler* as the new event loop exception handler.
893
894 If *handler* is ``None``, the default exception handler will
895 be set.
896
897 If *handler* is a callable object, it should have a
898 matching signature to ``(loop, context)``, where ``loop``
899 will be a reference to the active event loop, ``context``
900 will be a ``dict`` object (see :meth:`call_exception_handler`
901 documentation for details about context).
902
Guido van Rossumf68afd82016-08-08 09:41:21 -0700903.. method:: AbstractEventLoop.get_exception_handler()
Yury Selivanov950204d2016-05-16 16:23:00 -0400904
905 Return the exception handler, or ``None`` if the default one
906 is in use.
907
908 .. versionadded:: 3.5.2
909
Guido van Rossumf68afd82016-08-08 09:41:21 -0700910.. method:: AbstractEventLoop.default_exception_handler(context)
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500911
912 Default exception handler.
913
914 This is called when an exception occurs and no exception
915 handler is set, and can be called by a custom exception
916 handler that wants to defer to the default behavior.
917
918 *context* parameter has the same meaning as in
919 :meth:`call_exception_handler`.
920
Guido van Rossumf68afd82016-08-08 09:41:21 -0700921.. method:: AbstractEventLoop.call_exception_handler(context)
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500922
923 Call the current event loop exception handler.
924
925 *context* is a ``dict`` object containing the following keys
926 (new keys may be introduced later):
927
928 * 'message': Error message;
929 * 'exception' (optional): Exception object;
930 * 'future' (optional): :class:`asyncio.Future` instance;
931 * 'handle' (optional): :class:`asyncio.Handle` instance;
932 * 'protocol' (optional): :ref:`Protocol <asyncio-protocol>` instance;
933 * 'transport' (optional): :ref:`Transport <asyncio-transport>` instance;
934 * 'socket' (optional): :class:`socket.socket` instance.
935
936 .. note::
937
938 Note: this method should not be overloaded in subclassed
939 event loops. For any custom exception handling, use
940 :meth:`set_exception_handler()` method.
941
Victor Stinner0f3e6bc2014-02-19 23:15:02 +0100942Debug mode
943----------
944
Guido van Rossumf68afd82016-08-08 09:41:21 -0700945.. method:: AbstractEventLoop.get_debug()
Victor Stinner0f3e6bc2014-02-19 23:15:02 +0100946
Victor Stinner7b7120e2014-06-23 00:12:14 +0200947 Get the debug mode (:class:`bool`) of the event loop.
948
949 The default value is ``True`` if the environment variable
950 :envvar:`PYTHONASYNCIODEBUG` is set to a non-empty string, ``False``
951 otherwise.
Victor Stinner0f3e6bc2014-02-19 23:15:02 +0100952
Victor Stinner64d750b2014-06-18 03:25:23 +0200953 .. versionadded:: 3.4.2
954
Guido van Rossumf68afd82016-08-08 09:41:21 -0700955.. method:: AbstractEventLoop.set_debug(enabled: bool)
Victor Stinner0f3e6bc2014-02-19 23:15:02 +0100956
957 Set the debug mode of the event loop.
958
Victor Stinner64d750b2014-06-18 03:25:23 +0200959 .. versionadded:: 3.4.2
960
Victor Stinner0f3e6bc2014-02-19 23:15:02 +0100961.. seealso::
962
Victor Stinner62511fd2014-06-23 00:36:11 +0200963 The :ref:`debug mode of asyncio <asyncio-debug-mode>`.
Victor Stinner0f3e6bc2014-02-19 23:15:02 +0100964
Victor Stinner8c462c52014-01-24 18:11:43 +0100965Server
966------
967
Victor Stinner8ebeb032014-07-11 23:47:40 +0200968.. class:: Server
Victor Stinner8c462c52014-01-24 18:11:43 +0100969
Victor Stinner8ebeb032014-07-11 23:47:40 +0200970 Server listening on sockets.
971
Yury Selivanovc9070d02018-01-25 18:08:09 -0500972 Object created by :meth:`AbstractEventLoop.create_server`,
973 :meth:`AbstractEventLoop.create_unix_server`, :func:`start_server`,
974 and :func:`start_unix_server` functions. Don't instantiate the class
975 directly.
976
977 *Server* objects are asynchronous context managers. When used in an
978 ``async with`` statement, it's guaranteed that the Server object is
979 closed and not accepting new connections when the ``async with``
980 statement is completed::
981
982 srv = await loop.create_server(...)
983
984 async with srv:
985 # some code
986
987 # At this point, srv is closed and no longer accepts new connections.
988
989
990 .. versionchanged:: 3.7
991 Server object is an asynchronous context manager since Python 3.7.
Victor Stinner8c462c52014-01-24 18:11:43 +0100992
993 .. method:: close()
994
Victor Stinner4bfb14a2014-07-12 03:20:24 +0200995 Stop serving: close listening sockets and set the :attr:`sockets`
996 attribute to ``None``.
997
Berker Peksag49c9edf2016-01-20 07:14:22 +0200998 The sockets that represent existing incoming client connections are left
999 open.
Victor Stinner8ebeb032014-07-11 23:47:40 +02001000
Berker Peksag49c9edf2016-01-20 07:14:22 +02001001 The server is closed asynchronously, use the :meth:`wait_closed`
1002 coroutine to wait until the server is closed.
Victor Stinner8c462c52014-01-24 18:11:43 +01001003
Srinivas Reddy Thatiparthy (శ్రీనివాస్ రెడ్డి తాటిపర్తి)1634fc22017-12-30 20:39:32 +05301004 .. method:: get_loop()
1005
1006 Gives the event loop associated with the server object.
1007
1008 .. versionadded:: 3.7
1009
Yury Selivanovc9070d02018-01-25 18:08:09 -05001010 .. coroutinemethod:: start_serving()
1011
1012 Start accepting connections.
1013
1014 This method is idempotent, so it can be called when
1015 the server is already being serving.
1016
1017 The new *start_serving* keyword-only parameter to
1018 :meth:`AbstractEventLoop.create_server` and
1019 :meth:`asyncio.start_server` allows to create a Server object
1020 that is not accepting connections right away. In which case
1021 this method, or :meth:`Server.serve_forever` can be used
1022 to make the Server object to start accepting connections.
1023
1024 .. versionadded:: 3.7
1025
1026 .. coroutinemethod:: serve_forever()
1027
1028 Start accepting connections until the coroutine is cancelled.
1029 Cancellation of ``serve_forever`` task causes the server
1030 to be closed.
1031
1032 This method can be called if the server is already accepting
1033 connections. Only one ``serve_forever`` task can exist per
1034 one *Server* object.
1035
1036 Example::
1037
1038 async def client_connected(reader, writer):
1039 # Communicate with the client with
1040 # reader/writer streams. For example:
1041 await reader.readline()
1042
1043 async def main(host, port):
1044 srv = await asyncio.start_server(
1045 client_connected, host, port)
Andrew Svetlov17ab8f02018-02-17 19:44:35 +02001046 await srv.serve_forever()
Yury Selivanovc9070d02018-01-25 18:08:09 -05001047
1048 asyncio.run(main('127.0.0.1', 0))
1049
1050 .. versionadded:: 3.7
1051
1052 .. method:: is_serving()
1053
1054 Return ``True`` if the server is accepting new connections.
1055
1056 .. versionadded:: 3.7
1057
Victor Stinnerbdd574d2015-02-12 22:49:18 +01001058 .. coroutinemethod:: wait_closed()
Victor Stinner8c462c52014-01-24 18:11:43 +01001059
Victor Stinner8ebeb032014-07-11 23:47:40 +02001060 Wait until the :meth:`close` method completes.
1061
Victor Stinner8ebeb032014-07-11 23:47:40 +02001062 .. attribute:: sockets
1063
1064 List of :class:`socket.socket` objects the server is listening to, or
1065 ``None`` if the server is closed.
Victor Stinner8c462c52014-01-24 18:11:43 +01001066
Yury Selivanovc9070d02018-01-25 18:08:09 -05001067 .. versionchanged:: 3.7
1068 Prior to Python 3.7 ``Server.sockets`` used to return the
1069 internal list of server's sockets directly. In 3.7 a copy
1070 of that list is returned.
1071
Victor Stinner8c462c52014-01-24 18:11:43 +01001072
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001073Handle
1074------
1075
1076.. class:: Handle
1077
Guido van Rossumf68afd82016-08-08 09:41:21 -07001078 A callback wrapper object returned by :func:`AbstractEventLoop.call_soon`,
Andrew Svetlov3d4dbd82018-02-01 19:59:32 +02001079 :func:`AbstractEventLoop.call_soon_threadsafe`.
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001080
1081 .. method:: cancel()
1082
Yury Selivanov1096f762015-06-25 13:49:52 -04001083 Cancel the call. If the callback is already canceled or executed,
1084 this method has no effect.
Victor Stinneraea82292014-07-08 23:42:38 +02001085
Marat Sharafutdinov69cfed12017-11-07 12:06:05 +03001086 .. method:: cancelled()
1087
1088 Return ``True`` if the call was cancelled.
1089
1090 .. versionadded:: 3.7
1091
Andrew Svetlov3d4dbd82018-02-01 19:59:32 +02001092.. class:: TimerHandle
1093
1094 A callback wrapper object returned by :func:`AbstractEventLoop.call_later`,
1095 and :func:`AbstractEventLoop.call_at`.
1096
1097 The class is inherited from :class:`Handle`.
1098
1099 .. method:: when()
1100
1101 Return a scheduled callback time as :class:`float` seconds.
1102
1103 The time is an absolute timestamp, using the same time
1104 reference as :meth:`AbstractEventLoop.time`.
1105
1106 .. versionadded:: 3.7
1107
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001108
Andrew Svetlov7464e872018-01-19 20:04:29 +02001109SendfileNotAvailableError
1110-------------------------
1111
1112
1113.. exception:: SendfileNotAvailableError
1114
1115 Sendfile syscall is not available, subclass of :exc:`RuntimeError`.
1116
Sam Dunster65a34702018-03-27 17:47:38 -07001117 Raised if the OS does not support sendfile syscall for
Andrew Svetlov7464e872018-01-19 20:04:29 +02001118 given socket or file type.
1119
1120
Victor Stinner6888b962014-10-11 16:15:58 +02001121Event loop examples
Victor Stinnera092a612015-01-09 15:58:41 +01001122-------------------
Yury Selivanov43ee1c12014-02-19 20:58:44 -05001123
Victor Stinner3e09e322013-12-03 01:22:06 +01001124.. _asyncio-hello-world-callback:
Victor Stinnerea3183f2013-12-03 01:08:00 +01001125
Victor Stinner7f314ed2014-10-15 18:49:16 +02001126Hello World with call_soon()
Victor Stinnera092a612015-01-09 15:58:41 +01001127^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +01001128
Guido van Rossumf68afd82016-08-08 09:41:21 -07001129Example using the :meth:`AbstractEventLoop.call_soon` method to schedule a
Victor Stinner7f314ed2014-10-15 18:49:16 +02001130callback. The callback displays ``"Hello World"`` and then stops the event
1131loop::
Victor Stinnerea3183f2013-12-03 01:08:00 +01001132
1133 import asyncio
1134
Victor Stinner7f314ed2014-10-15 18:49:16 +02001135 def hello_world(loop):
Victor Stinnerea3183f2013-12-03 01:08:00 +01001136 print('Hello World')
Victor Stinner7f314ed2014-10-15 18:49:16 +02001137 loop.stop()
Victor Stinnerea3183f2013-12-03 01:08:00 +01001138
1139 loop = asyncio.get_event_loop()
Victor Stinner7f314ed2014-10-15 18:49:16 +02001140
1141 # Schedule a call to hello_world()
1142 loop.call_soon(hello_world, loop)
1143
1144 # Blocking call interrupted by loop.stop()
1145 loop.run_forever()
1146 loop.close()
Victor Stinnerea3183f2013-12-03 01:08:00 +01001147
Victor Stinner3e09e322013-12-03 01:22:06 +01001148.. seealso::
Victor Stinnerea3183f2013-12-03 01:08:00 +01001149
Victor Stinner6888b962014-10-11 16:15:58 +02001150 The :ref:`Hello World coroutine <asyncio-hello-world-coroutine>` example
1151 uses a :ref:`coroutine <coroutine>`.
Victor Stinnerea3183f2013-12-03 01:08:00 +01001152
Victor Stinner8b863482014-01-27 10:07:50 +01001153
Victor Stinner7f314ed2014-10-15 18:49:16 +02001154.. _asyncio-date-callback:
1155
1156Display the current date with call_later()
Victor Stinnera092a612015-01-09 15:58:41 +01001157^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinner7f314ed2014-10-15 18:49:16 +02001158
1159Example of callback displaying the current date every second. The callback uses
Guido van Rossumf68afd82016-08-08 09:41:21 -07001160the :meth:`AbstractEventLoop.call_later` method to reschedule itself during 5
Victor Stinner7f314ed2014-10-15 18:49:16 +02001161seconds, and then stops the event loop::
1162
1163 import asyncio
1164 import datetime
1165
1166 def display_date(end_time, loop):
1167 print(datetime.datetime.now())
1168 if (loop.time() + 1.0) < end_time:
1169 loop.call_later(1, display_date, end_time, loop)
1170 else:
1171 loop.stop()
1172
1173 loop = asyncio.get_event_loop()
1174
1175 # Schedule the first call to display_date()
1176 end_time = loop.time() + 5.0
1177 loop.call_soon(display_date, end_time, loop)
1178
1179 # Blocking call interrupted by loop.stop()
1180 loop.run_forever()
1181 loop.close()
1182
1183.. seealso::
1184
1185 The :ref:`coroutine displaying the current date
1186 <asyncio-date-coroutine>` example uses a :ref:`coroutine
1187 <coroutine>`.
1188
1189
Victor Stinner04e6df32014-10-11 16:16:27 +02001190.. _asyncio-watch-read-event:
Victor Stinner8b863482014-01-27 10:07:50 +01001191
Victor Stinner04e6df32014-10-11 16:16:27 +02001192Watch a file descriptor for read events
Victor Stinnera092a612015-01-09 15:58:41 +01001193^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinner04e6df32014-10-11 16:16:27 +02001194
1195Wait until a file descriptor received some data using the
Guido van Rossumf68afd82016-08-08 09:41:21 -07001196:meth:`AbstractEventLoop.add_reader` method and then close the event loop::
Victor Stinner04e6df32014-10-11 16:16:27 +02001197
1198 import asyncio
Victor Stinnerac577d72017-11-28 21:33:20 +01001199 from socket import socketpair
Victor Stinner04e6df32014-10-11 16:16:27 +02001200
1201 # Create a pair of connected file descriptors
Victor Stinnerccd8e342014-10-11 16:30:02 +02001202 rsock, wsock = socketpair()
Victor Stinner04e6df32014-10-11 16:16:27 +02001203 loop = asyncio.get_event_loop()
1204
1205 def reader():
1206 data = rsock.recv(100)
1207 print("Received:", data.decode())
Victor Stinner2cef3002014-10-23 22:38:46 +02001208 # We are done: unregister the file descriptor
Victor Stinner04e6df32014-10-11 16:16:27 +02001209 loop.remove_reader(rsock)
1210 # Stop the event loop
1211 loop.stop()
1212
Victor Stinner2cef3002014-10-23 22:38:46 +02001213 # Register the file descriptor for read event
Victor Stinner04e6df32014-10-11 16:16:27 +02001214 loop.add_reader(rsock, reader)
1215
1216 # Simulate the reception of data from the network
1217 loop.call_soon(wsock.send, 'abc'.encode())
1218
1219 # Run the event loop
1220 loop.run_forever()
1221
1222 # We are done, close sockets and the event loop
1223 rsock.close()
1224 wsock.close()
1225 loop.close()
1226
1227.. seealso::
1228
1229 The :ref:`register an open socket to wait for data using a protocol
1230 <asyncio-register-socket>` example uses a low-level protocol created by the
Guido van Rossumf68afd82016-08-08 09:41:21 -07001231 :meth:`AbstractEventLoop.create_connection` method.
Victor Stinner04e6df32014-10-11 16:16:27 +02001232
1233 The :ref:`register an open socket to wait for data using streams
1234 <asyncio-register-socket-streams>` example uses high-level streams
1235 created by the :func:`open_connection` function in a coroutine.
1236
1237
1238Set signal handlers for SIGINT and SIGTERM
Victor Stinnera092a612015-01-09 15:58:41 +01001239^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinner04e6df32014-10-11 16:16:27 +02001240
1241Register handlers for signals :py:data:`SIGINT` and :py:data:`SIGTERM` using
Guido van Rossumf68afd82016-08-08 09:41:21 -07001242the :meth:`AbstractEventLoop.add_signal_handler` method::
Victor Stinner8b863482014-01-27 10:07:50 +01001243
1244 import asyncio
1245 import functools
1246 import os
1247 import signal
1248
1249 def ask_exit(signame):
1250 print("got signal %s: exit" % signame)
1251 loop.stop()
1252
1253 loop = asyncio.get_event_loop()
1254 for signame in ('SIGINT', 'SIGTERM'):
1255 loop.add_signal_handler(getattr(signal, signame),
1256 functools.partial(ask_exit, signame))
1257
Serhiy Storchaka0424eaf2015-09-12 17:45:25 +03001258 print("Event loop running forever, press Ctrl+C to interrupt.")
Victor Stinner8b863482014-01-27 10:07:50 +01001259 print("pid %s: send SIGINT or SIGTERM to exit." % os.getpid())
Victor Stinner63b21a82014-07-05 15:38:59 +02001260 try:
1261 loop.run_forever()
1262 finally:
1263 loop.close()
Victor Stinner2cef3002014-10-23 22:38:46 +02001264
1265This example only works on UNIX.