blob: 83bbb70b03792885e689bc768beaa3513cb0c2a2 [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
Yury Selivanov1096f762015-06-25 13:49:52 -0400174 An instance of :class:`asyncio.Handle` is returned, which can be
175 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
Yury Selivanov1096f762015-06-25 13:49:52 -0400196 An instance of :class:`asyncio.Handle` is returned, which can be
197 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 Stinner337e03f2014-08-11 01:11:13 +0200238 This method was added in Python 3.4.2. Use the :func:`async` function to
239 support also older Python versions.
Victor Stinner530ef2f2014-07-08 12:39:10 +0200240
241 .. versionadded:: 3.4.2
242
Guido van Rossumf68afd82016-08-08 09:41:21 -0700243.. method:: AbstractEventLoop.set_task_factory(factory)
Yury Selivanov71854612015-05-11 16:28:27 -0400244
245 Set a task factory that will be used by
Guido van Rossumf68afd82016-08-08 09:41:21 -0700246 :meth:`AbstractEventLoop.create_task`.
Yury Selivanov71854612015-05-11 16:28:27 -0400247
248 If *factory* is ``None`` the default task factory will be set.
249
250 If *factory* is a *callable*, it should have a signature matching
251 ``(loop, coro)``, where *loop* will be a reference to the active
252 event loop, *coro* will be a coroutine object. The callable
253 must return an :class:`asyncio.Future` compatible object.
254
255 .. versionadded:: 3.4.4
256
Guido van Rossumf68afd82016-08-08 09:41:21 -0700257.. method:: AbstractEventLoop.get_task_factory()
Yury Selivanov71854612015-05-11 16:28:27 -0400258
259 Return a task factory, or ``None`` if the default one is in use.
260
261 .. versionadded:: 3.4.4
262
Victor Stinner530ef2f2014-07-08 12:39:10 +0200263
Victor Stinnerea3183f2013-12-03 01:08:00 +0100264Creating connections
Victor Stinner0c6f1ca2013-12-03 01:46:39 +0100265--------------------
Victor Stinnerea3183f2013-12-03 01:08:00 +0100266
Guido van Rossumf68afd82016-08-08 09:41:21 -0700267.. 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)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100268
269 Create a streaming transport connection to a given Internet *host* and
Victor Stinnera6919aa2014-02-19 13:32:34 +0100270 *port*: socket family :py:data:`~socket.AF_INET` or
271 :py:data:`~socket.AF_INET6` depending on *host* (or *family* if specified),
272 socket type :py:data:`~socket.SOCK_STREAM`. *protocol_factory* must be a
273 callable returning a :ref:`protocol <asyncio-protocol>` instance.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100274
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500275 This method is a :ref:`coroutine <coroutine>` which will try to
Victor Stinnerea3183f2013-12-03 01:08:00 +0100276 establish the connection in the background. When successful, the
277 coroutine returns a ``(transport, protocol)`` pair.
278
279 The chronological synopsis of the underlying operation is as follows:
280
Victor Stinner9592edb2014-02-02 15:03:02 +0100281 #. The connection is established, and a :ref:`transport <asyncio-transport>`
Victor Stinnerea3183f2013-12-03 01:08:00 +0100282 is created to represent it.
283
284 #. *protocol_factory* is called without arguments and must return a
Victor Stinner9592edb2014-02-02 15:03:02 +0100285 :ref:`protocol <asyncio-protocol>` instance.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100286
287 #. The protocol instance is tied to the transport, and its
288 :meth:`connection_made` method is called.
289
290 #. The coroutine returns successfully with the ``(transport, protocol)``
291 pair.
292
293 The created transport is an implementation-dependent bidirectional stream.
294
295 .. note::
296 *protocol_factory* can be any kind of callable, not necessarily
297 a class. For example, if you want to use a pre-created
298 protocol instance, you can pass ``lambda: my_protocol``.
299
Martin Panterc04fb562016-02-10 05:44:01 +0000300 Options that change how the connection is created:
Victor Stinnerea3183f2013-12-03 01:08:00 +0100301
302 * *ssl*: if given and not false, a SSL/TLS transport is created
303 (by default a plain TCP transport is created). If *ssl* is
304 a :class:`ssl.SSLContext` object, this context is used to create
305 the transport; if *ssl* is :const:`True`, a context with some
306 unspecified default settings is used.
307
Berker Peksag9c1dba22014-09-28 00:00:58 +0300308 .. seealso:: :ref:`SSL/TLS security considerations <ssl-security>`
Antoine Pitrouc5e075f2014-03-22 18:19:11 +0100309
Victor Stinnerea3183f2013-12-03 01:08:00 +0100310 * *server_hostname*, is only for use together with *ssl*,
311 and sets or overrides the hostname that the target server's certificate
312 will be matched against. By default the value of the *host* argument
313 is used. If *host* is empty, there is no default and you must pass a
314 value for *server_hostname*. If *server_hostname* is an empty
315 string, hostname matching is disabled (which is a serious security
316 risk, allowing for man-in-the-middle-attacks).
317
318 * *family*, *proto*, *flags* are the optional address family, protocol
319 and flags to be passed through to getaddrinfo() for *host* resolution.
320 If given, these should all be integers from the corresponding
321 :mod:`socket` module constants.
322
323 * *sock*, if given, should be an existing, already connected
324 :class:`socket.socket` object to be used by the transport.
325 If *sock* is given, none of *host*, *port*, *family*, *proto*, *flags*
326 and *local_addr* should be specified.
327
328 * *local_addr*, if given, is a ``(local_host, local_port)`` tuple used
329 to bind the socket to locally. The *local_host* and *local_port*
330 are looked up using getaddrinfo(), similarly to *host* and *port*.
331
Victor Stinner60208a12015-09-15 22:41:52 +0200332 .. versionchanged:: 3.5
333
334 On Windows with :class:`ProactorEventLoop`, SSL/TLS is now supported.
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200335
Victor Stinnerc8ea8132014-01-23 11:02:09 +0100336 .. seealso::
337
338 The :func:`open_connection` function can be used to get a pair of
339 (:class:`StreamReader`, :class:`StreamWriter`) instead of a protocol.
340
Victor Stinnerea3183f2013-12-03 01:08:00 +0100341
Guido van Rossumf68afd82016-08-08 09:41:21 -0700342.. 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 +0100343
344 Create datagram connection: socket family :py:data:`~socket.AF_INET` or
345 :py:data:`~socket.AF_INET6` depending on *host* (or *family* if specified),
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700346 socket type :py:data:`~socket.SOCK_DGRAM`. *protocol_factory* must be a
347 callable returning a :ref:`protocol <asyncio-protocol>` instance.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100348
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500349 This method is a :ref:`coroutine <coroutine>` which will try to
Victor Stinnera6919aa2014-02-19 13:32:34 +0100350 establish the connection in the background. When successful, the
351 coroutine returns a ``(transport, protocol)`` pair.
352
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700353 Options changing how the connection is created:
354
355 * *local_addr*, if given, is a ``(local_host, local_port)`` tuple used
356 to bind the socket to locally. The *local_host* and *local_port*
357 are looked up using :meth:`getaddrinfo`.
358
359 * *remote_addr*, if given, is a ``(remote_host, remote_port)`` tuple used
360 to connect the socket to a remote address. The *remote_host* and
361 *remote_port* are looked up using :meth:`getaddrinfo`.
362
363 * *family*, *proto*, *flags* are the optional address family, protocol
364 and flags to be passed through to :meth:`getaddrinfo` for *host*
365 resolution. If given, these should all be integers from the
366 corresponding :mod:`socket` module constants.
367
368 * *reuse_address* tells the kernel to reuse a local socket in
369 TIME_WAIT state, without waiting for its natural timeout to
Serhiy Storchaka4adf01c2016-10-19 18:30:05 +0300370 expire. If not specified will automatically be set to ``True`` on
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700371 UNIX.
372
373 * *reuse_port* tells the kernel to allow this endpoint to be bound to the
374 same port as other existing endpoints are bound to, so long as they all
375 set this flag when being created. This option is not supported on Windows
376 and some UNIX's. If the :py:data:`~socket.SO_REUSEPORT` constant is not
377 defined then this capability is unsupported.
378
379 * *allow_broadcast* tells the kernel to allow this endpoint to send
380 messages to the broadcast address.
381
382 * *sock* can optionally be specified in order to use a preexisting,
383 already connected, :class:`socket.socket` object to be used by the
384 transport. If specified, *local_addr* and *remote_addr* should be omitted
385 (must be :const:`None`).
Victor Stinnera6919aa2014-02-19 13:32:34 +0100386
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200387 On Windows with :class:`ProactorEventLoop`, this method is not supported.
388
Victor Stinnerc7edffd2014-10-12 11:24:26 +0200389 See :ref:`UDP echo client protocol <asyncio-udp-echo-client-protocol>` and
390 :ref:`UDP echo server protocol <asyncio-udp-echo-server-protocol>` examples.
391
Victor Stinnera6919aa2014-02-19 13:32:34 +0100392
Guido van Rossumf68afd82016-08-08 09:41:21 -0700393.. coroutinemethod:: AbstractEventLoop.create_unix_connection(protocol_factory, path, \*, ssl=None, sock=None, server_hostname=None)
Victor Stinnera6919aa2014-02-19 13:32:34 +0100394
395 Create UNIX connection: socket family :py:data:`~socket.AF_UNIX`, socket
396 type :py:data:`~socket.SOCK_STREAM`. The :py:data:`~socket.AF_UNIX` socket
397 family is used to communicate between processes on the same machine
398 efficiently.
399
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500400 This method is a :ref:`coroutine <coroutine>` which will try to
Victor Stinnera6919aa2014-02-19 13:32:34 +0100401 establish the connection in the background. When successful, the
402 coroutine returns a ``(transport, protocol)`` pair.
403
Guido van Rossum9e80eeb2016-11-03 14:17:25 -0700404 *path* is the name of a UNIX domain socket, and is required unless a *sock*
405 parameter is specified. Abstract UNIX sockets, :class:`str`, and
406 :class:`bytes` paths are supported.
407
Guido van Rossumf68afd82016-08-08 09:41:21 -0700408 See the :meth:`AbstractEventLoop.create_connection` method for parameters.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100409
410 Availability: UNIX.
411
412
Victor Stinnerea3183f2013-12-03 01:08:00 +0100413Creating listening connections
414------------------------------
415
Guido van Rossumf68afd82016-08-08 09:41:21 -0700416.. 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)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100417
Victor Stinner33f6abe2014-10-12 20:36:04 +0200418 Create a TCP server (socket type :data:`~socket.SOCK_STREAM`) bound to
419 *host* and *port*.
420
421 Return a :class:`Server` object, its :attr:`~Server.sockets` attribute
422 contains created sockets. Use the :meth:`Server.close` method to stop the
423 server: close listening sockets.
424
425 Parameters:
426
Victor Stinner5e4a7d82015-09-21 18:33:43 +0200427 * The *host* parameter can be a string, in that case the TCP server is
428 bound to *host* and *port*. The *host* parameter can also be a sequence
429 of strings and in that case the TCP server is bound to all hosts of the
430 sequence. If *host* is an empty string or ``None``, all interfaces are
431 assumed and a list of multiple sockets will be returned (most likely one
432 for IPv4 and another one for IPv6).
Victor Stinner33f6abe2014-10-12 20:36:04 +0200433
434 * *family* can be set to either :data:`socket.AF_INET` or
435 :data:`~socket.AF_INET6` to force the socket to use IPv4 or IPv6. If not set
436 it will be determined from host (defaults to :data:`socket.AF_UNSPEC`).
437
438 * *flags* is a bitmask for :meth:`getaddrinfo`.
439
440 * *sock* can optionally be specified in order to use a preexisting
441 socket object. If specified, *host* and *port* should be omitted (must be
442 :const:`None`).
443
444 * *backlog* is the maximum number of queued connections passed to
445 :meth:`~socket.socket.listen` (defaults to 100).
446
447 * *ssl* can be set to an :class:`~ssl.SSLContext` to enable SSL over the
448 accepted connections.
449
450 * *reuse_address* tells the kernel to reuse a local socket in
451 TIME_WAIT state, without waiting for its natural timeout to
Serhiy Storchaka4adf01c2016-10-19 18:30:05 +0300452 expire. If not specified will automatically be set to ``True`` on
Victor Stinner33f6abe2014-10-12 20:36:04 +0200453 UNIX.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100454
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700455 * *reuse_port* tells the kernel to allow this endpoint to be bound to the
456 same port as other existing endpoints are bound to, so long as they all
457 set this flag when being created. This option is not supported on
458 Windows.
459
Victor Stinnerd1432092014-06-19 17:11:49 +0200460 This method is a :ref:`coroutine <coroutine>`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100461
Victor Stinner60208a12015-09-15 22:41:52 +0200462 .. versionchanged:: 3.5
463
464 On Windows with :class:`ProactorEventLoop`, SSL/TLS is now supported.
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200465
Victor Stinnerc8ea8132014-01-23 11:02:09 +0100466 .. seealso::
467
468 The function :func:`start_server` creates a (:class:`StreamReader`,
469 :class:`StreamWriter`) pair and calls back a function with this pair.
470
Victor Stinner7b58a2b2015-09-21 18:41:05 +0200471 .. versionchanged:: 3.5.1
Victor Stinner5e4a7d82015-09-21 18:33:43 +0200472
473 The *host* parameter can now be a sequence of strings.
474
Victor Stinnerea3183f2013-12-03 01:08:00 +0100475
Guido van Rossumf68afd82016-08-08 09:41:21 -0700476.. coroutinemethod:: AbstractEventLoop.create_unix_server(protocol_factory, path=None, \*, sock=None, backlog=100, ssl=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100477
Guido van Rossumf68afd82016-08-08 09:41:21 -0700478 Similar to :meth:`AbstractEventLoop.create_server`, but specific to the
Victor Stinnera6919aa2014-02-19 13:32:34 +0100479 socket family :py:data:`~socket.AF_UNIX`.
480
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100481 This method is a :ref:`coroutine <coroutine>`.
482
Victor Stinnera6919aa2014-02-19 13:32:34 +0100483 Availability: UNIX.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100484
Yury Selivanov3b3a1412016-11-07 15:35:25 -0500485.. coroutinemethod:: BaseEventLoop.connect_accepted_socket(protocol_factory, sock, \*, ssl=None)
486
487 Handle an accepted connection.
488
489 This is used by servers that accept connections outside of
490 asyncio but that use asyncio to handle them.
491
492 Parameters:
493
494 * *sock* is a preexisting socket object returned from an ``accept``
495 call.
496
497 * *ssl* can be set to an :class:`~ssl.SSLContext` to enable SSL over the
498 accepted connections.
499
500 This method is a :ref:`coroutine <coroutine>`. When completed, the
501 coroutine returns a ``(transport, protocol)`` pair.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100502
Victor Stinnerc1567df2014-02-08 23:22:58 +0100503Watch file descriptors
504----------------------
505
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200506On Windows with :class:`SelectorEventLoop`, only socket handles are supported
507(ex: pipe file descriptors are not supported).
508
509On Windows with :class:`ProactorEventLoop`, these methods are not supported.
510
Guido van Rossumf68afd82016-08-08 09:41:21 -0700511.. method:: AbstractEventLoop.add_reader(fd, callback, \*args)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100512
513 Start watching the file descriptor for read availability and then call the
514 *callback* with specified arguments.
515
Victor Stinner8464c242014-11-28 13:15:41 +0100516 :ref:`Use functools.partial to pass keywords to the callback
517 <asyncio-pass-keywords>`.
518
Guido van Rossumf68afd82016-08-08 09:41:21 -0700519.. method:: AbstractEventLoop.remove_reader(fd)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100520
521 Stop watching the file descriptor for read availability.
522
Guido van Rossumf68afd82016-08-08 09:41:21 -0700523.. method:: AbstractEventLoop.add_writer(fd, callback, \*args)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100524
525 Start watching the file descriptor for write availability and then call the
526 *callback* with specified arguments.
527
Victor Stinner8464c242014-11-28 13:15:41 +0100528 :ref:`Use functools.partial to pass keywords to the callback
529 <asyncio-pass-keywords>`.
530
Guido van Rossumf68afd82016-08-08 09:41:21 -0700531.. method:: AbstractEventLoop.remove_writer(fd)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100532
533 Stop watching the file descriptor for write availability.
534
Victor Stinner04e6df32014-10-11 16:16:27 +0200535The :ref:`watch a file descriptor for read events <asyncio-watch-read-event>`
Guido van Rossumf68afd82016-08-08 09:41:21 -0700536example uses the low-level :meth:`AbstractEventLoop.add_reader` method to register
Victor Stinner04e6df32014-10-11 16:16:27 +0200537the file descriptor of a socket.
538
Victor Stinnerc1567df2014-02-08 23:22:58 +0100539
540Low-level socket operations
541---------------------------
542
Guido van Rossumf68afd82016-08-08 09:41:21 -0700543.. coroutinemethod:: AbstractEventLoop.sock_recv(sock, nbytes)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100544
Yury Selivanov55c50842016-06-08 12:48:15 -0400545 Receive data from the socket. Modeled after blocking
546 :meth:`socket.socket.recv` method.
547
548 The return value is a bytes object
Victor Stinnerc1567df2014-02-08 23:22:58 +0100549 representing the data received. The maximum amount of data to be received
550 at once is specified by *nbytes*.
551
Victor Stinnerd84fd732014-08-26 01:01:59 +0200552 With :class:`SelectorEventLoop` event loop, the socket *sock* must be
553 non-blocking.
Victor Stinnerec2ce092014-07-29 23:12:22 +0200554
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500555 This method is a :ref:`coroutine <coroutine>`.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100556
Guido van Rossumf68afd82016-08-08 09:41:21 -0700557.. coroutinemethod:: AbstractEventLoop.sock_sendall(sock, data)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100558
Yury Selivanov55c50842016-06-08 12:48:15 -0400559 Send data to the socket. Modeled after blocking
560 :meth:`socket.socket.sendall` method.
561
562 The socket must be connected to a remote socket.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100563 This method continues to send data from *data* until either all data has
564 been sent or an error occurs. ``None`` is returned on success. On error,
565 an exception is raised, and there is no way to determine how much data, if
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500566 any, was successfully processed by the receiving end of the connection.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100567
Victor Stinnerd84fd732014-08-26 01:01:59 +0200568 With :class:`SelectorEventLoop` event loop, the socket *sock* must be
569 non-blocking.
Victor Stinnerec2ce092014-07-29 23:12:22 +0200570
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500571 This method is a :ref:`coroutine <coroutine>`.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100572
Guido van Rossumf68afd82016-08-08 09:41:21 -0700573.. coroutinemethod:: AbstractEventLoop.sock_connect(sock, address)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100574
Yury Selivanov55c50842016-06-08 12:48:15 -0400575 Connect to a remote socket at *address*. Modeled after
576 blocking :meth:`socket.socket.connect` method.
Victor Stinner1b0580b2014-02-13 09:24:37 +0100577
Victor Stinnerd84fd732014-08-26 01:01:59 +0200578 With :class:`SelectorEventLoop` event loop, the socket *sock* must be
579 non-blocking.
Victor Stinnerec2ce092014-07-29 23:12:22 +0200580
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500581 This method is a :ref:`coroutine <coroutine>`.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100582
Yury Selivanov55c50842016-06-08 12:48:15 -0400583 .. versionchanged:: 3.5.2
584 ``address`` no longer needs to be resolved. ``sock_connect``
585 will try to check if the *address* is already resolved by calling
586 :func:`socket.inet_pton`. If not,
Guido van Rossumf68afd82016-08-08 09:41:21 -0700587 :meth:`AbstractEventLoop.getaddrinfo` will be used to resolve the
Yury Selivanov55c50842016-06-08 12:48:15 -0400588 *address*.
589
Victor Stinnerc1567df2014-02-08 23:22:58 +0100590 .. seealso::
591
Guido van Rossumf68afd82016-08-08 09:41:21 -0700592 :meth:`AbstractEventLoop.create_connection`
Yury Selivanov55c50842016-06-08 12:48:15 -0400593 and :func:`asyncio.open_connection() <open_connection>`.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100594
595
Guido van Rossumf68afd82016-08-08 09:41:21 -0700596.. coroutinemethod:: AbstractEventLoop.sock_accept(sock)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100597
Yury Selivanov55c50842016-06-08 12:48:15 -0400598 Accept a connection. Modeled after blocking
599 :meth:`socket.socket.accept`.
600
601 The socket must be bound to an address and listening
Victor Stinnerc1567df2014-02-08 23:22:58 +0100602 for connections. The return value is a pair ``(conn, address)`` where *conn*
603 is a *new* socket object usable to send and receive data on the connection,
604 and *address* is the address bound to the socket on the other end of the
605 connection.
606
Victor Stinnerec2ce092014-07-29 23:12:22 +0200607 The socket *sock* must be non-blocking.
608
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500609 This method is a :ref:`coroutine <coroutine>`.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100610
611 .. seealso::
612
Guido van Rossumf68afd82016-08-08 09:41:21 -0700613 :meth:`AbstractEventLoop.create_server` and :func:`start_server`.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100614
615
616Resolve host name
617-----------------
Victor Stinnerea3183f2013-12-03 01:08:00 +0100618
Guido van Rossumf68afd82016-08-08 09:41:21 -0700619.. coroutinemethod:: AbstractEventLoop.getaddrinfo(host, port, \*, family=0, type=0, proto=0, flags=0)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100620
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500621 This method is a :ref:`coroutine <coroutine>`, similar to
622 :meth:`socket.getaddrinfo` function but non-blocking.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100623
Guido van Rossumf68afd82016-08-08 09:41:21 -0700624.. coroutinemethod:: AbstractEventLoop.getnameinfo(sockaddr, flags=0)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100625
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500626 This method is a :ref:`coroutine <coroutine>`, similar to
627 :meth:`socket.getnameinfo` function but non-blocking.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100628
629
Victor Stinner984600f2014-03-25 09:40:26 +0100630Connect pipes
631-------------
Victor Stinnerea3183f2013-12-03 01:08:00 +0100632
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200633On Windows with :class:`SelectorEventLoop`, these methods are not supported.
634Use :class:`ProactorEventLoop` to support pipes on Windows.
635
Guido van Rossumf68afd82016-08-08 09:41:21 -0700636.. coroutinemethod:: AbstractEventLoop.connect_read_pipe(protocol_factory, pipe)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100637
Victor Stinnerd84fd732014-08-26 01:01:59 +0200638 Register read pipe in eventloop.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100639
640 *protocol_factory* should instantiate object with :class:`Protocol`
Victor Stinnera5b257a2014-05-29 00:14:03 +0200641 interface. *pipe* is a :term:`file-like object <file object>`.
642 Return pair ``(transport, protocol)``, where *transport* supports the
Victor Stinnerea3183f2013-12-03 01:08:00 +0100643 :class:`ReadTransport` interface.
644
Victor Stinnerd84fd732014-08-26 01:01:59 +0200645 With :class:`SelectorEventLoop` event loop, the *pipe* is set to
646 non-blocking mode.
647
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500648 This method is a :ref:`coroutine <coroutine>`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100649
Guido van Rossumf68afd82016-08-08 09:41:21 -0700650.. coroutinemethod:: AbstractEventLoop.connect_write_pipe(protocol_factory, pipe)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100651
652 Register write pipe in eventloop.
653
654 *protocol_factory* should instantiate object with :class:`BaseProtocol`
Victor Stinner2cef3002014-10-23 22:38:46 +0200655 interface. *pipe* is :term:`file-like object <file object>`.
656 Return pair ``(transport, protocol)``, where *transport* supports
Victor Stinnerea3183f2013-12-03 01:08:00 +0100657 :class:`WriteTransport` interface.
658
Victor Stinnerd84fd732014-08-26 01:01:59 +0200659 With :class:`SelectorEventLoop` event loop, the *pipe* is set to
660 non-blocking mode.
661
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500662 This method is a :ref:`coroutine <coroutine>`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100663
Victor Stinner08444382014-02-02 22:43:39 +0100664.. seealso::
665
Guido van Rossumf68afd82016-08-08 09:41:21 -0700666 The :meth:`AbstractEventLoop.subprocess_exec` and
667 :meth:`AbstractEventLoop.subprocess_shell` methods.
Victor Stinner08444382014-02-02 22:43:39 +0100668
Victor Stinnerea3183f2013-12-03 01:08:00 +0100669
Victor Stinner8b863482014-01-27 10:07:50 +0100670UNIX signals
671------------
672
673Availability: UNIX only.
674
Guido van Rossumf68afd82016-08-08 09:41:21 -0700675.. method:: AbstractEventLoop.add_signal_handler(signum, callback, \*args)
Victor Stinner8b863482014-01-27 10:07:50 +0100676
677 Add a handler for a signal.
678
679 Raise :exc:`ValueError` if the signal number is invalid or uncatchable.
680 Raise :exc:`RuntimeError` if there is a problem setting up the handler.
681
Victor Stinner8464c242014-11-28 13:15:41 +0100682 :ref:`Use functools.partial to pass keywords to the callback
683 <asyncio-pass-keywords>`.
684
Guido van Rossumf68afd82016-08-08 09:41:21 -0700685.. method:: AbstractEventLoop.remove_signal_handler(sig)
Victor Stinner8b863482014-01-27 10:07:50 +0100686
687 Remove a handler for a signal.
688
689 Return ``True`` if a signal handler was removed, ``False`` if not.
690
691.. seealso::
692
693 The :mod:`signal` module.
694
695
Victor Stinnerea3183f2013-12-03 01:08:00 +0100696Executor
697--------
698
699Call a function in an :class:`~concurrent.futures.Executor` (pool of threads or
700pool of processes). By default, an event loop uses a thread pool executor
701(:class:`~concurrent.futures.ThreadPoolExecutor`).
702
Guido van Rossumf68afd82016-08-08 09:41:21 -0700703.. coroutinemethod:: AbstractEventLoop.run_in_executor(executor, func, \*args)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100704
Andrew Svetlov1c62b522015-10-01 09:48:08 +0300705 Arrange for a *func* to be called in the specified executor.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100706
Larry Hastings3732ed22014-03-15 21:13:56 -0700707 The *executor* argument should be an :class:`~concurrent.futures.Executor`
708 instance. The default executor is used if *executor* is ``None``.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100709
Andrew Svetlov1c62b522015-10-01 09:48:08 +0300710 :ref:`Use functools.partial to pass keywords to the *func*
Victor Stinner8464c242014-11-28 13:15:41 +0100711 <asyncio-pass-keywords>`.
712
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500713 This method is a :ref:`coroutine <coroutine>`.
714
Yury Selivanove8a60452016-10-21 17:40:42 -0400715 .. versionchanged:: 3.5.3
716 :meth:`BaseEventLoop.run_in_executor` no longer configures the
717 ``max_workers`` of the thread pool executor it creates, instead
718 leaving it up to the thread pool executor
719 (:class:`~concurrent.futures.ThreadPoolExecutor`) to set the
720 default.
721
Guido van Rossumf68afd82016-08-08 09:41:21 -0700722.. method:: AbstractEventLoop.set_default_executor(executor)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100723
724 Set the default executor used by :meth:`run_in_executor`.
725
726
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500727Error Handling API
728------------------
729
Martin Panterc04fb562016-02-10 05:44:01 +0000730Allows customizing how exceptions are handled in the event loop.
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500731
Guido van Rossumf68afd82016-08-08 09:41:21 -0700732.. method:: AbstractEventLoop.set_exception_handler(handler)
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500733
734 Set *handler* as the new event loop exception handler.
735
736 If *handler* is ``None``, the default exception handler will
737 be set.
738
739 If *handler* is a callable object, it should have a
740 matching signature to ``(loop, context)``, where ``loop``
741 will be a reference to the active event loop, ``context``
742 will be a ``dict`` object (see :meth:`call_exception_handler`
743 documentation for details about context).
744
Guido van Rossumf68afd82016-08-08 09:41:21 -0700745.. method:: AbstractEventLoop.get_exception_handler()
Yury Selivanov950204d2016-05-16 16:23:00 -0400746
747 Return the exception handler, or ``None`` if the default one
748 is in use.
749
750 .. versionadded:: 3.5.2
751
Guido van Rossumf68afd82016-08-08 09:41:21 -0700752.. method:: AbstractEventLoop.default_exception_handler(context)
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500753
754 Default exception handler.
755
756 This is called when an exception occurs and no exception
757 handler is set, and can be called by a custom exception
758 handler that wants to defer to the default behavior.
759
760 *context* parameter has the same meaning as in
761 :meth:`call_exception_handler`.
762
Guido van Rossumf68afd82016-08-08 09:41:21 -0700763.. method:: AbstractEventLoop.call_exception_handler(context)
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500764
765 Call the current event loop exception handler.
766
767 *context* is a ``dict`` object containing the following keys
768 (new keys may be introduced later):
769
770 * 'message': Error message;
771 * 'exception' (optional): Exception object;
772 * 'future' (optional): :class:`asyncio.Future` instance;
773 * 'handle' (optional): :class:`asyncio.Handle` instance;
774 * 'protocol' (optional): :ref:`Protocol <asyncio-protocol>` instance;
775 * 'transport' (optional): :ref:`Transport <asyncio-transport>` instance;
776 * 'socket' (optional): :class:`socket.socket` instance.
777
778 .. note::
779
780 Note: this method should not be overloaded in subclassed
781 event loops. For any custom exception handling, use
782 :meth:`set_exception_handler()` method.
783
Victor Stinner0f3e6bc2014-02-19 23:15:02 +0100784Debug mode
785----------
786
Guido van Rossumf68afd82016-08-08 09:41:21 -0700787.. method:: AbstractEventLoop.get_debug()
Victor Stinner0f3e6bc2014-02-19 23:15:02 +0100788
Victor Stinner7b7120e2014-06-23 00:12:14 +0200789 Get the debug mode (:class:`bool`) of the event loop.
790
791 The default value is ``True`` if the environment variable
792 :envvar:`PYTHONASYNCIODEBUG` is set to a non-empty string, ``False``
793 otherwise.
Victor Stinner0f3e6bc2014-02-19 23:15:02 +0100794
Victor Stinner64d750b2014-06-18 03:25:23 +0200795 .. versionadded:: 3.4.2
796
Guido van Rossumf68afd82016-08-08 09:41:21 -0700797.. method:: AbstractEventLoop.set_debug(enabled: bool)
Victor Stinner0f3e6bc2014-02-19 23:15:02 +0100798
799 Set the debug mode of the event loop.
800
Victor Stinner64d750b2014-06-18 03:25:23 +0200801 .. versionadded:: 3.4.2
802
Victor Stinner0f3e6bc2014-02-19 23:15:02 +0100803.. seealso::
804
Victor Stinner62511fd2014-06-23 00:36:11 +0200805 The :ref:`debug mode of asyncio <asyncio-debug-mode>`.
Victor Stinner0f3e6bc2014-02-19 23:15:02 +0100806
Victor Stinner8c462c52014-01-24 18:11:43 +0100807Server
808------
809
Victor Stinner8ebeb032014-07-11 23:47:40 +0200810.. class:: Server
Victor Stinner8c462c52014-01-24 18:11:43 +0100811
Victor Stinner8ebeb032014-07-11 23:47:40 +0200812 Server listening on sockets.
813
Guido van Rossumf68afd82016-08-08 09:41:21 -0700814 Object created by the :meth:`AbstractEventLoop.create_server` method and the
R David Murray756f0b12015-01-29 19:53:33 -0500815 :func:`start_server` function. Don't instantiate the class directly.
Victor Stinner8c462c52014-01-24 18:11:43 +0100816
817 .. method:: close()
818
Victor Stinner4bfb14a2014-07-12 03:20:24 +0200819 Stop serving: close listening sockets and set the :attr:`sockets`
820 attribute to ``None``.
821
Berker Peksag49c9edf2016-01-20 07:14:22 +0200822 The sockets that represent existing incoming client connections are left
823 open.
Victor Stinner8ebeb032014-07-11 23:47:40 +0200824
Berker Peksag49c9edf2016-01-20 07:14:22 +0200825 The server is closed asynchronously, use the :meth:`wait_closed`
826 coroutine to wait until the server is closed.
Victor Stinner8c462c52014-01-24 18:11:43 +0100827
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100828 .. coroutinemethod:: wait_closed()
Victor Stinner8c462c52014-01-24 18:11:43 +0100829
Victor Stinner8ebeb032014-07-11 23:47:40 +0200830 Wait until the :meth:`close` method completes.
831
832 This method is a :ref:`coroutine <coroutine>`.
833
834 .. attribute:: sockets
835
836 List of :class:`socket.socket` objects the server is listening to, or
837 ``None`` if the server is closed.
Victor Stinner8c462c52014-01-24 18:11:43 +0100838
839
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500840Handle
841------
842
843.. class:: Handle
844
Guido van Rossumf68afd82016-08-08 09:41:21 -0700845 A callback wrapper object returned by :func:`AbstractEventLoop.call_soon`,
846 :func:`AbstractEventLoop.call_soon_threadsafe`, :func:`AbstractEventLoop.call_later`,
847 and :func:`AbstractEventLoop.call_at`.
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500848
849 .. method:: cancel()
850
Yury Selivanov1096f762015-06-25 13:49:52 -0400851 Cancel the call. If the callback is already canceled or executed,
852 this method has no effect.
Victor Stinneraea82292014-07-08 23:42:38 +0200853
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500854
Victor Stinner6888b962014-10-11 16:15:58 +0200855Event loop examples
Victor Stinnera092a612015-01-09 15:58:41 +0100856-------------------
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500857
Victor Stinner3e09e322013-12-03 01:22:06 +0100858.. _asyncio-hello-world-callback:
Victor Stinnerea3183f2013-12-03 01:08:00 +0100859
Victor Stinner7f314ed2014-10-15 18:49:16 +0200860Hello World with call_soon()
Victor Stinnera092a612015-01-09 15:58:41 +0100861^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +0100862
Guido van Rossumf68afd82016-08-08 09:41:21 -0700863Example using the :meth:`AbstractEventLoop.call_soon` method to schedule a
Victor Stinner7f314ed2014-10-15 18:49:16 +0200864callback. The callback displays ``"Hello World"`` and then stops the event
865loop::
Victor Stinnerea3183f2013-12-03 01:08:00 +0100866
867 import asyncio
868
Victor Stinner7f314ed2014-10-15 18:49:16 +0200869 def hello_world(loop):
Victor Stinnerea3183f2013-12-03 01:08:00 +0100870 print('Hello World')
Victor Stinner7f314ed2014-10-15 18:49:16 +0200871 loop.stop()
Victor Stinnerea3183f2013-12-03 01:08:00 +0100872
873 loop = asyncio.get_event_loop()
Victor Stinner7f314ed2014-10-15 18:49:16 +0200874
875 # Schedule a call to hello_world()
876 loop.call_soon(hello_world, loop)
877
878 # Blocking call interrupted by loop.stop()
879 loop.run_forever()
880 loop.close()
Victor Stinnerea3183f2013-12-03 01:08:00 +0100881
Victor Stinner3e09e322013-12-03 01:22:06 +0100882.. seealso::
Victor Stinnerea3183f2013-12-03 01:08:00 +0100883
Victor Stinner6888b962014-10-11 16:15:58 +0200884 The :ref:`Hello World coroutine <asyncio-hello-world-coroutine>` example
885 uses a :ref:`coroutine <coroutine>`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100886
Victor Stinner8b863482014-01-27 10:07:50 +0100887
Victor Stinner7f314ed2014-10-15 18:49:16 +0200888.. _asyncio-date-callback:
889
890Display the current date with call_later()
Victor Stinnera092a612015-01-09 15:58:41 +0100891^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinner7f314ed2014-10-15 18:49:16 +0200892
893Example of callback displaying the current date every second. The callback uses
Guido van Rossumf68afd82016-08-08 09:41:21 -0700894the :meth:`AbstractEventLoop.call_later` method to reschedule itself during 5
Victor Stinner7f314ed2014-10-15 18:49:16 +0200895seconds, and then stops the event loop::
896
897 import asyncio
898 import datetime
899
900 def display_date(end_time, loop):
901 print(datetime.datetime.now())
902 if (loop.time() + 1.0) < end_time:
903 loop.call_later(1, display_date, end_time, loop)
904 else:
905 loop.stop()
906
907 loop = asyncio.get_event_loop()
908
909 # Schedule the first call to display_date()
910 end_time = loop.time() + 5.0
911 loop.call_soon(display_date, end_time, loop)
912
913 # Blocking call interrupted by loop.stop()
914 loop.run_forever()
915 loop.close()
916
917.. seealso::
918
919 The :ref:`coroutine displaying the current date
920 <asyncio-date-coroutine>` example uses a :ref:`coroutine
921 <coroutine>`.
922
923
Victor Stinner04e6df32014-10-11 16:16:27 +0200924.. _asyncio-watch-read-event:
Victor Stinner8b863482014-01-27 10:07:50 +0100925
Victor Stinner04e6df32014-10-11 16:16:27 +0200926Watch a file descriptor for read events
Victor Stinnera092a612015-01-09 15:58:41 +0100927^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinner04e6df32014-10-11 16:16:27 +0200928
929Wait until a file descriptor received some data using the
Guido van Rossumf68afd82016-08-08 09:41:21 -0700930:meth:`AbstractEventLoop.add_reader` method and then close the event loop::
Victor Stinner04e6df32014-10-11 16:16:27 +0200931
932 import asyncio
Victor Stinnerccd8e342014-10-11 16:30:02 +0200933 try:
934 from socket import socketpair
935 except ImportError:
936 from asyncio.windows_utils import socketpair
Victor Stinner04e6df32014-10-11 16:16:27 +0200937
938 # Create a pair of connected file descriptors
Victor Stinnerccd8e342014-10-11 16:30:02 +0200939 rsock, wsock = socketpair()
Victor Stinner04e6df32014-10-11 16:16:27 +0200940 loop = asyncio.get_event_loop()
941
942 def reader():
943 data = rsock.recv(100)
944 print("Received:", data.decode())
Victor Stinner2cef3002014-10-23 22:38:46 +0200945 # We are done: unregister the file descriptor
Victor Stinner04e6df32014-10-11 16:16:27 +0200946 loop.remove_reader(rsock)
947 # Stop the event loop
948 loop.stop()
949
Victor Stinner2cef3002014-10-23 22:38:46 +0200950 # Register the file descriptor for read event
Victor Stinner04e6df32014-10-11 16:16:27 +0200951 loop.add_reader(rsock, reader)
952
953 # Simulate the reception of data from the network
954 loop.call_soon(wsock.send, 'abc'.encode())
955
956 # Run the event loop
957 loop.run_forever()
958
959 # We are done, close sockets and the event loop
960 rsock.close()
961 wsock.close()
962 loop.close()
963
964.. seealso::
965
966 The :ref:`register an open socket to wait for data using a protocol
967 <asyncio-register-socket>` example uses a low-level protocol created by the
Guido van Rossumf68afd82016-08-08 09:41:21 -0700968 :meth:`AbstractEventLoop.create_connection` method.
Victor Stinner04e6df32014-10-11 16:16:27 +0200969
970 The :ref:`register an open socket to wait for data using streams
971 <asyncio-register-socket-streams>` example uses high-level streams
972 created by the :func:`open_connection` function in a coroutine.
973
974
975Set signal handlers for SIGINT and SIGTERM
Victor Stinnera092a612015-01-09 15:58:41 +0100976^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinner04e6df32014-10-11 16:16:27 +0200977
978Register handlers for signals :py:data:`SIGINT` and :py:data:`SIGTERM` using
Guido van Rossumf68afd82016-08-08 09:41:21 -0700979the :meth:`AbstractEventLoop.add_signal_handler` method::
Victor Stinner8b863482014-01-27 10:07:50 +0100980
981 import asyncio
982 import functools
983 import os
984 import signal
985
986 def ask_exit(signame):
987 print("got signal %s: exit" % signame)
988 loop.stop()
989
990 loop = asyncio.get_event_loop()
991 for signame in ('SIGINT', 'SIGTERM'):
992 loop.add_signal_handler(getattr(signal, signame),
993 functools.partial(ask_exit, signame))
994
Serhiy Storchaka0424eaf2015-09-12 17:45:25 +0300995 print("Event loop running forever, press Ctrl+C to interrupt.")
Victor Stinner8b863482014-01-27 10:07:50 +0100996 print("pid %s: send SIGINT or SIGTERM to exit." % os.getpid())
Victor Stinner63b21a82014-07-05 15:38:59 +0200997 try:
998 loop.run_forever()
999 finally:
1000 loop.close()
Victor Stinner2cef3002014-10-23 22:38:46 +02001001
1002This example only works on UNIX.