blob: 7ec3aa106e265405c2b4da5737e9dfb10d00a006 [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
8The event loop is the central execution device provided by :mod:`asyncio`.
Zachary Ware5e580da2015-08-27 15:54:39 -05009It provides multiple facilities, including:
Victor Stinnerea3183f2013-12-03 01:08:00 +010010
Eli Benderskyb73c8332014-02-09 06:07:47 -080011* Registering, executing and cancelling delayed calls (timeouts).
Victor Stinnerea3183f2013-12-03 01:08:00 +010012
Victor Stinner9592edb2014-02-02 15:03:02 +010013* Creating client and server :ref:`transports <asyncio-transport>` for various
Eli Benderskyb73c8332014-02-09 06:07:47 -080014 kinds of communication.
Victor Stinnerea3183f2013-12-03 01:08:00 +010015
Eli Bendersky136fea22014-02-09 06:55:58 -080016* Launching subprocesses and the associated :ref:`transports
17 <asyncio-transport>` for communication with an external program.
Victor Stinnerea3183f2013-12-03 01:08:00 +010018
Eli Benderskyb73c8332014-02-09 06:07:47 -080019* Delegating costly function calls to a pool of threads.
Victor Stinnerea3183f2013-12-03 01:08:00 +010020
Victor Stinneraea82292014-07-08 23:42:38 +020021.. class:: BaseEventLoop
Eli Bendersky136fea22014-02-09 06:55:58 -080022
Victor Stinneraea82292014-07-08 23:42:38 +020023 Base class of event loops.
Victor Stinnerea3183f2013-12-03 01:08:00 +010024
Victor Stinner83704962015-02-25 14:24:15 +010025 This class is :ref:`not thread safe <asyncio-multithreading>`.
26
Victor Stinnerea3183f2013-12-03 01:08:00 +010027Run an event loop
28-----------------
29
30.. method:: BaseEventLoop.run_forever()
31
Guido van Rossum41f69f42015-11-19 13:28:47 -080032 Run until :meth:`stop` is called. If :meth:`stop` is called before
33 :meth:`run_forever()` is called, this polls the I/O selector once
34 with a timeout of zero, runs all callbacks scheduled in response to
35 I/O events (and those that were already scheduled), and then exits.
36 If :meth:`stop` is called while :meth:`run_forever` is running,
37 this will run the current batch of callbacks and then exit. Note
38 that callbacks scheduled by callbacks will not run in that case;
39 they will run the next time :meth:`run_forever` is called.
40
Guido van Rossum82f9fea2015-11-19 13:33:34 -080041 .. versionchanged:: 3.5.1
Victor Stinnerea3183f2013-12-03 01:08:00 +010042
43.. method:: BaseEventLoop.run_until_complete(future)
44
Victor Stinner99c2ab42013-12-03 19:17:25 +010045 Run until the :class:`Future` is done.
Victor Stinnerea3183f2013-12-03 01:08:00 +010046
Victor Stinner530ef2f2014-07-08 12:39:10 +020047 If the argument is a :ref:`coroutine object <coroutine>`, it is wrapped by
Yury Selivanov04356e12015-06-30 22:13:22 -040048 :func:`ensure_future`.
Victor Stinnerea3183f2013-12-03 01:08:00 +010049
50 Return the Future's result, or raise its exception.
51
52.. method:: BaseEventLoop.is_running()
53
54 Returns running status of event loop.
55
Victor Stinnerafbf8272013-12-03 02:05:42 +010056.. method:: BaseEventLoop.stop()
Victor Stinnerea3183f2013-12-03 01:08:00 +010057
58 Stop running the event loop.
59
Guido van Rossum41f69f42015-11-19 13:28:47 -080060 This causes :meth:`run_forever` to exit at the next suitable
61 opportunity (see there for more details).
62
Guido van Rossum82f9fea2015-11-19 13:33:34 -080063 .. versionchanged:: 3.5.1
Victor Stinnerea3183f2013-12-03 01:08:00 +010064
Victor Stinnerbb2fc5b2014-06-10 10:23:10 +020065.. method:: BaseEventLoop.is_closed()
66
67 Returns ``True`` if the event loop was closed.
68
69 .. versionadded:: 3.4.2
70
Victor Stinnerea3183f2013-12-03 01:08:00 +010071.. method:: BaseEventLoop.close()
72
Guido van Rossum41f69f42015-11-19 13:28:47 -080073 Close the event loop. The loop must not be running. Pending
74 callbacks will be lost.
Victor Stinnerea3183f2013-12-03 01:08:00 +010075
76 This clears the queues and shuts down the executor, but does not wait for
77 the executor to finish.
78
79 This is idempotent and irreversible. No other methods should be called after
80 this one.
81
Victor Stinner8464c242014-11-28 13:15:41 +010082.. _asyncio-pass-keywords:
Victor Stinnerea3183f2013-12-03 01:08:00 +010083
84Calls
85-----
86
Victor Stinner8464c242014-11-28 13:15:41 +010087Most :mod:`asyncio` functions don't accept keywords. If you want to pass
88keywords to your callback, use :func:`functools.partial`. For example,
89``loop.call_soon(functools.partial(print, "Hello", flush=True))`` will call
90``print("Hello", flush=True)``.
91
92.. note::
93 :func:`functools.partial` is better than ``lambda`` functions, because
94 :mod:`asyncio` can inspect :func:`functools.partial` object to display
95 parameters in debug mode, whereas ``lambda`` functions have a poor
96 representation.
97
Victor Stinnerea3183f2013-12-03 01:08:00 +010098.. method:: BaseEventLoop.call_soon(callback, \*args)
99
Victor Stinner4d5115c2014-12-15 17:50:55 +0100100 Arrange for a callback to be called as soon as possible. The callback is
101 called after :meth:`call_soon` returns, when control returns to the event
102 loop.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100103
104 This operates as a FIFO queue, callbacks are called in the order in
105 which they are registered. Each callback will be called exactly once.
106
107 Any positional arguments after the callback will be passed to the
108 callback when it is called.
109
Yury Selivanov1096f762015-06-25 13:49:52 -0400110 An instance of :class:`asyncio.Handle` is returned, which can be
111 used to cancel the callback.
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500112
Victor Stinner8464c242014-11-28 13:15:41 +0100113 :ref:`Use functools.partial to pass keywords to the callback
114 <asyncio-pass-keywords>`.
115
Victor Stinnerea3183f2013-12-03 01:08:00 +0100116.. method:: BaseEventLoop.call_soon_threadsafe(callback, \*args)
117
118 Like :meth:`call_soon`, but thread safe.
119
Victor Stinner83704962015-02-25 14:24:15 +0100120 See the :ref:`concurrency and multithreading <asyncio-multithreading>`
121 section of the documentation.
122
Victor Stinnerea3183f2013-12-03 01:08:00 +0100123
Victor Stinner45b27ed2014-02-01 02:36:43 +0100124.. _asyncio-delayed-calls:
125
Victor Stinnerea3183f2013-12-03 01:08:00 +0100126Delayed calls
127-------------
128
129The event loop has its own internal clock for computing timeouts.
130Which clock is used depends on the (platform-specific) event loop
131implementation; ideally it is a monotonic clock. This will generally be
132a different clock than :func:`time.time`.
133
Victor Stinnerfd9d3742014-02-18 09:37:43 +0100134.. note::
135
136 Timeouts (relative *delay* or absolute *when*) should not exceed one day.
137
Victor Stinner45b27ed2014-02-01 02:36:43 +0100138
Victor Stinnerea3183f2013-12-03 01:08:00 +0100139.. method:: BaseEventLoop.call_later(delay, callback, *args)
140
141 Arrange for the *callback* to be called after the given *delay*
142 seconds (either an int or float).
143
Yury Selivanov1096f762015-06-25 13:49:52 -0400144 An instance of :class:`asyncio.Handle` is returned, which can be
145 used to cancel the callback.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100146
147 *callback* will be called exactly once per call to :meth:`call_later`.
148 If two callbacks are scheduled for exactly the same time, it is
149 undefined which will be called first.
150
151 The optional positional *args* will be passed to the callback when it
152 is called. If you want the callback to be called with some named
153 arguments, use a closure or :func:`functools.partial`.
154
Victor Stinner8464c242014-11-28 13:15:41 +0100155 :ref:`Use functools.partial to pass keywords to the callback
156 <asyncio-pass-keywords>`.
157
Victor Stinnerea3183f2013-12-03 01:08:00 +0100158.. method:: BaseEventLoop.call_at(when, callback, *args)
159
160 Arrange for the *callback* to be called at the given absolute timestamp
Berker Peksagb5563992014-11-07 19:51:07 +0200161 *when* (an int or float), using the same time reference as
162 :meth:`BaseEventLoop.time`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100163
164 This method's behavior is the same as :meth:`call_later`.
165
Yury Selivanov1096f762015-06-25 13:49:52 -0400166 An instance of :class:`asyncio.Handle` is returned, which can be
167 used to cancel the callback.
168
Victor Stinner8464c242014-11-28 13:15:41 +0100169 :ref:`Use functools.partial to pass keywords to the callback
170 <asyncio-pass-keywords>`.
171
Victor Stinnerea3183f2013-12-03 01:08:00 +0100172.. method:: BaseEventLoop.time()
173
174 Return the current time, as a :class:`float` value, according to the
175 event loop's internal clock.
176
Victor Stinner3e09e322013-12-03 01:22:06 +0100177.. seealso::
178
179 The :func:`asyncio.sleep` function.
180
Victor Stinnerea3183f2013-12-03 01:08:00 +0100181
Yury Selivanov950204d2016-05-16 16:23:00 -0400182Futures
183-------
184
185.. method:: BaseEventLoop.create_future()
186
187 Create an :class:`asyncio.Future` object attached to the loop.
188
189 This is a preferred way to create futures in asyncio, as event
190 loop implementations can provide alternative implementations
191 of the Future class (with better performance or instrumentation).
192
193 .. versionadded:: 3.5.2
194
195
Yury Selivanovbb961342015-06-25 11:54:34 -0400196Tasks
197-----
Victor Stinner530ef2f2014-07-08 12:39:10 +0200198
199.. method:: BaseEventLoop.create_task(coro)
200
201 Schedule the execution of a :ref:`coroutine object <coroutine>`: wrap it in
202 a future. Return a :class:`Task` object.
203
204 Third-party event loops can use their own subclass of :class:`Task` for
205 interoperability. In this case, the result type is a subclass of
206 :class:`Task`.
207
Victor Stinner337e03f2014-08-11 01:11:13 +0200208 This method was added in Python 3.4.2. Use the :func:`async` function to
209 support also older Python versions.
Victor Stinner530ef2f2014-07-08 12:39:10 +0200210
211 .. versionadded:: 3.4.2
212
Yury Selivanov71854612015-05-11 16:28:27 -0400213.. method:: BaseEventLoop.set_task_factory(factory)
214
215 Set a task factory that will be used by
216 :meth:`BaseEventLoop.create_task`.
217
218 If *factory* is ``None`` the default task factory will be set.
219
220 If *factory* is a *callable*, it should have a signature matching
221 ``(loop, coro)``, where *loop* will be a reference to the active
222 event loop, *coro* will be a coroutine object. The callable
223 must return an :class:`asyncio.Future` compatible object.
224
225 .. versionadded:: 3.4.4
226
227.. method:: BaseEventLoop.get_task_factory()
228
229 Return a task factory, or ``None`` if the default one is in use.
230
231 .. versionadded:: 3.4.4
232
Victor Stinner530ef2f2014-07-08 12:39:10 +0200233
Victor Stinnerea3183f2013-12-03 01:08:00 +0100234Creating connections
Victor Stinner0c6f1ca2013-12-03 01:46:39 +0100235--------------------
Victor Stinnerea3183f2013-12-03 01:08:00 +0100236
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100237.. coroutinemethod:: BaseEventLoop.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 +0100238
239 Create a streaming transport connection to a given Internet *host* and
Victor Stinnera6919aa2014-02-19 13:32:34 +0100240 *port*: socket family :py:data:`~socket.AF_INET` or
241 :py:data:`~socket.AF_INET6` depending on *host* (or *family* if specified),
242 socket type :py:data:`~socket.SOCK_STREAM`. *protocol_factory* must be a
243 callable returning a :ref:`protocol <asyncio-protocol>` instance.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100244
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500245 This method is a :ref:`coroutine <coroutine>` which will try to
Victor Stinnerea3183f2013-12-03 01:08:00 +0100246 establish the connection in the background. When successful, the
247 coroutine returns a ``(transport, protocol)`` pair.
248
249 The chronological synopsis of the underlying operation is as follows:
250
Victor Stinner9592edb2014-02-02 15:03:02 +0100251 #. The connection is established, and a :ref:`transport <asyncio-transport>`
Victor Stinnerea3183f2013-12-03 01:08:00 +0100252 is created to represent it.
253
254 #. *protocol_factory* is called without arguments and must return a
Victor Stinner9592edb2014-02-02 15:03:02 +0100255 :ref:`protocol <asyncio-protocol>` instance.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100256
257 #. The protocol instance is tied to the transport, and its
258 :meth:`connection_made` method is called.
259
260 #. The coroutine returns successfully with the ``(transport, protocol)``
261 pair.
262
263 The created transport is an implementation-dependent bidirectional stream.
264
265 .. note::
266 *protocol_factory* can be any kind of callable, not necessarily
267 a class. For example, if you want to use a pre-created
268 protocol instance, you can pass ``lambda: my_protocol``.
269
Martin Panterc04fb562016-02-10 05:44:01 +0000270 Options that change how the connection is created:
Victor Stinnerea3183f2013-12-03 01:08:00 +0100271
272 * *ssl*: if given and not false, a SSL/TLS transport is created
273 (by default a plain TCP transport is created). If *ssl* is
274 a :class:`ssl.SSLContext` object, this context is used to create
275 the transport; if *ssl* is :const:`True`, a context with some
276 unspecified default settings is used.
277
Berker Peksag9c1dba22014-09-28 00:00:58 +0300278 .. seealso:: :ref:`SSL/TLS security considerations <ssl-security>`
Antoine Pitrouc5e075f2014-03-22 18:19:11 +0100279
Victor Stinnerea3183f2013-12-03 01:08:00 +0100280 * *server_hostname*, is only for use together with *ssl*,
281 and sets or overrides the hostname that the target server's certificate
282 will be matched against. By default the value of the *host* argument
283 is used. If *host* is empty, there is no default and you must pass a
284 value for *server_hostname*. If *server_hostname* is an empty
285 string, hostname matching is disabled (which is a serious security
286 risk, allowing for man-in-the-middle-attacks).
287
288 * *family*, *proto*, *flags* are the optional address family, protocol
289 and flags to be passed through to getaddrinfo() for *host* resolution.
290 If given, these should all be integers from the corresponding
291 :mod:`socket` module constants.
292
293 * *sock*, if given, should be an existing, already connected
294 :class:`socket.socket` object to be used by the transport.
295 If *sock* is given, none of *host*, *port*, *family*, *proto*, *flags*
296 and *local_addr* should be specified.
297
298 * *local_addr*, if given, is a ``(local_host, local_port)`` tuple used
299 to bind the socket to locally. The *local_host* and *local_port*
300 are looked up using getaddrinfo(), similarly to *host* and *port*.
301
Victor Stinner60208a12015-09-15 22:41:52 +0200302 .. versionchanged:: 3.5
303
304 On Windows with :class:`ProactorEventLoop`, SSL/TLS is now supported.
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200305
Victor Stinnerc8ea8132014-01-23 11:02:09 +0100306 .. seealso::
307
308 The :func:`open_connection` function can be used to get a pair of
309 (:class:`StreamReader`, :class:`StreamWriter`) instead of a protocol.
310
Victor Stinnerea3183f2013-12-03 01:08:00 +0100311
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700312.. coroutinemethod:: BaseEventLoop.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 +0100313
314 Create datagram connection: socket family :py:data:`~socket.AF_INET` or
315 :py:data:`~socket.AF_INET6` depending on *host* (or *family* if specified),
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700316 socket type :py:data:`~socket.SOCK_DGRAM`. *protocol_factory* must be a
317 callable returning a :ref:`protocol <asyncio-protocol>` instance.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100318
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500319 This method is a :ref:`coroutine <coroutine>` which will try to
Victor Stinnera6919aa2014-02-19 13:32:34 +0100320 establish the connection in the background. When successful, the
321 coroutine returns a ``(transport, protocol)`` pair.
322
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700323 Options changing how the connection is created:
324
325 * *local_addr*, if given, is a ``(local_host, local_port)`` tuple used
326 to bind the socket to locally. The *local_host* and *local_port*
327 are looked up using :meth:`getaddrinfo`.
328
329 * *remote_addr*, if given, is a ``(remote_host, remote_port)`` tuple used
330 to connect the socket to a remote address. The *remote_host* and
331 *remote_port* are looked up using :meth:`getaddrinfo`.
332
333 * *family*, *proto*, *flags* are the optional address family, protocol
334 and flags to be passed through to :meth:`getaddrinfo` for *host*
335 resolution. If given, these should all be integers from the
336 corresponding :mod:`socket` module constants.
337
338 * *reuse_address* tells the kernel to reuse a local socket in
339 TIME_WAIT state, without waiting for its natural timeout to
340 expire. If not specified will automatically be set to True on
341 UNIX.
342
343 * *reuse_port* tells the kernel to allow this endpoint to be bound to the
344 same port as other existing endpoints are bound to, so long as they all
345 set this flag when being created. This option is not supported on Windows
346 and some UNIX's. If the :py:data:`~socket.SO_REUSEPORT` constant is not
347 defined then this capability is unsupported.
348
349 * *allow_broadcast* tells the kernel to allow this endpoint to send
350 messages to the broadcast address.
351
352 * *sock* can optionally be specified in order to use a preexisting,
353 already connected, :class:`socket.socket` object to be used by the
354 transport. If specified, *local_addr* and *remote_addr* should be omitted
355 (must be :const:`None`).
Victor Stinnera6919aa2014-02-19 13:32:34 +0100356
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200357 On Windows with :class:`ProactorEventLoop`, this method is not supported.
358
Victor Stinnerc7edffd2014-10-12 11:24:26 +0200359 See :ref:`UDP echo client protocol <asyncio-udp-echo-client-protocol>` and
360 :ref:`UDP echo server protocol <asyncio-udp-echo-server-protocol>` examples.
361
Victor Stinnera6919aa2014-02-19 13:32:34 +0100362
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100363.. coroutinemethod:: BaseEventLoop.create_unix_connection(protocol_factory, path, \*, ssl=None, sock=None, server_hostname=None)
Victor Stinnera6919aa2014-02-19 13:32:34 +0100364
365 Create UNIX connection: socket family :py:data:`~socket.AF_UNIX`, socket
366 type :py:data:`~socket.SOCK_STREAM`. The :py:data:`~socket.AF_UNIX` socket
367 family is used to communicate between processes on the same machine
368 efficiently.
369
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500370 This method is a :ref:`coroutine <coroutine>` which will try to
Victor Stinnera6919aa2014-02-19 13:32:34 +0100371 establish the connection in the background. When successful, the
372 coroutine returns a ``(transport, protocol)`` pair.
373
374 See the :meth:`BaseEventLoop.create_connection` method for parameters.
375
376 Availability: UNIX.
377
378
Victor Stinnerea3183f2013-12-03 01:08:00 +0100379Creating listening connections
380------------------------------
381
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700382.. coroutinemethod:: BaseEventLoop.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 +0100383
Victor Stinner33f6abe2014-10-12 20:36:04 +0200384 Create a TCP server (socket type :data:`~socket.SOCK_STREAM`) bound to
385 *host* and *port*.
386
387 Return a :class:`Server` object, its :attr:`~Server.sockets` attribute
388 contains created sockets. Use the :meth:`Server.close` method to stop the
389 server: close listening sockets.
390
391 Parameters:
392
Victor Stinner5e4a7d82015-09-21 18:33:43 +0200393 * The *host* parameter can be a string, in that case the TCP server is
394 bound to *host* and *port*. The *host* parameter can also be a sequence
395 of strings and in that case the TCP server is bound to all hosts of the
396 sequence. If *host* is an empty string or ``None``, all interfaces are
397 assumed and a list of multiple sockets will be returned (most likely one
398 for IPv4 and another one for IPv6).
Victor Stinner33f6abe2014-10-12 20:36:04 +0200399
400 * *family* can be set to either :data:`socket.AF_INET` or
401 :data:`~socket.AF_INET6` to force the socket to use IPv4 or IPv6. If not set
402 it will be determined from host (defaults to :data:`socket.AF_UNSPEC`).
403
404 * *flags* is a bitmask for :meth:`getaddrinfo`.
405
406 * *sock* can optionally be specified in order to use a preexisting
407 socket object. If specified, *host* and *port* should be omitted (must be
408 :const:`None`).
409
410 * *backlog* is the maximum number of queued connections passed to
411 :meth:`~socket.socket.listen` (defaults to 100).
412
413 * *ssl* can be set to an :class:`~ssl.SSLContext` to enable SSL over the
414 accepted connections.
415
416 * *reuse_address* tells the kernel to reuse a local socket in
417 TIME_WAIT state, without waiting for its natural timeout to
418 expire. If not specified will automatically be set to True on
419 UNIX.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100420
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700421 * *reuse_port* tells the kernel to allow this endpoint to be bound to the
422 same port as other existing endpoints are bound to, so long as they all
423 set this flag when being created. This option is not supported on
424 Windows.
425
Victor Stinnerd1432092014-06-19 17:11:49 +0200426 This method is a :ref:`coroutine <coroutine>`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100427
Victor Stinner60208a12015-09-15 22:41:52 +0200428 .. versionchanged:: 3.5
429
430 On Windows with :class:`ProactorEventLoop`, SSL/TLS is now supported.
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200431
Victor Stinnerc8ea8132014-01-23 11:02:09 +0100432 .. seealso::
433
434 The function :func:`start_server` creates a (:class:`StreamReader`,
435 :class:`StreamWriter`) pair and calls back a function with this pair.
436
Victor Stinner7b58a2b2015-09-21 18:41:05 +0200437 .. versionchanged:: 3.5.1
Victor Stinner5e4a7d82015-09-21 18:33:43 +0200438
439 The *host* parameter can now be a sequence of strings.
440
Victor Stinnerea3183f2013-12-03 01:08:00 +0100441
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100442.. coroutinemethod:: BaseEventLoop.create_unix_server(protocol_factory, path=None, \*, sock=None, backlog=100, ssl=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100443
Victor Stinnera6919aa2014-02-19 13:32:34 +0100444 Similar to :meth:`BaseEventLoop.create_server`, but specific to the
445 socket family :py:data:`~socket.AF_UNIX`.
446
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100447 This method is a :ref:`coroutine <coroutine>`.
448
Victor Stinnera6919aa2014-02-19 13:32:34 +0100449 Availability: UNIX.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100450
451
Victor Stinnerc1567df2014-02-08 23:22:58 +0100452Watch file descriptors
453----------------------
454
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200455On Windows with :class:`SelectorEventLoop`, only socket handles are supported
456(ex: pipe file descriptors are not supported).
457
458On Windows with :class:`ProactorEventLoop`, these methods are not supported.
459
Victor Stinnerc1567df2014-02-08 23:22:58 +0100460.. method:: BaseEventLoop.add_reader(fd, callback, \*args)
461
462 Start watching the file descriptor for read availability and then call the
463 *callback* with specified arguments.
464
Victor Stinner8464c242014-11-28 13:15:41 +0100465 :ref:`Use functools.partial to pass keywords to the callback
466 <asyncio-pass-keywords>`.
467
Victor Stinnerc1567df2014-02-08 23:22:58 +0100468.. method:: BaseEventLoop.remove_reader(fd)
469
470 Stop watching the file descriptor for read availability.
471
472.. method:: BaseEventLoop.add_writer(fd, callback, \*args)
473
474 Start watching the file descriptor for write availability and then call the
475 *callback* with specified arguments.
476
Victor Stinner8464c242014-11-28 13:15:41 +0100477 :ref:`Use functools.partial to pass keywords to the callback
478 <asyncio-pass-keywords>`.
479
Victor Stinnerc1567df2014-02-08 23:22:58 +0100480.. method:: BaseEventLoop.remove_writer(fd)
481
482 Stop watching the file descriptor for write availability.
483
Victor Stinner04e6df32014-10-11 16:16:27 +0200484The :ref:`watch a file descriptor for read events <asyncio-watch-read-event>`
485example uses the low-level :meth:`BaseEventLoop.add_reader` method to register
486the file descriptor of a socket.
487
Victor Stinnerc1567df2014-02-08 23:22:58 +0100488
489Low-level socket operations
490---------------------------
491
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100492.. coroutinemethod:: BaseEventLoop.sock_recv(sock, nbytes)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100493
Yury Selivanov55c50842016-06-08 12:48:15 -0400494 Receive data from the socket. Modeled after blocking
495 :meth:`socket.socket.recv` method.
496
497 The return value is a bytes object
Victor Stinnerc1567df2014-02-08 23:22:58 +0100498 representing the data received. The maximum amount of data to be received
499 at once is specified by *nbytes*.
500
Victor Stinnerd84fd732014-08-26 01:01:59 +0200501 With :class:`SelectorEventLoop` event loop, the socket *sock* must be
502 non-blocking.
Victor Stinnerec2ce092014-07-29 23:12:22 +0200503
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500504 This method is a :ref:`coroutine <coroutine>`.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100505
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100506.. coroutinemethod:: BaseEventLoop.sock_sendall(sock, data)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100507
Yury Selivanov55c50842016-06-08 12:48:15 -0400508 Send data to the socket. Modeled after blocking
509 :meth:`socket.socket.sendall` method.
510
511 The socket must be connected to a remote socket.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100512 This method continues to send data from *data* until either all data has
513 been sent or an error occurs. ``None`` is returned on success. On error,
514 an exception is raised, and there is no way to determine how much data, if
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500515 any, was successfully processed by the receiving end of the connection.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100516
Victor Stinnerd84fd732014-08-26 01:01:59 +0200517 With :class:`SelectorEventLoop` event loop, the socket *sock* must be
518 non-blocking.
Victor Stinnerec2ce092014-07-29 23:12:22 +0200519
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500520 This method is a :ref:`coroutine <coroutine>`.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100521
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100522.. coroutinemethod:: BaseEventLoop.sock_connect(sock, address)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100523
Yury Selivanov55c50842016-06-08 12:48:15 -0400524 Connect to a remote socket at *address*. Modeled after
525 blocking :meth:`socket.socket.connect` method.
Victor Stinner1b0580b2014-02-13 09:24:37 +0100526
Victor Stinnerd84fd732014-08-26 01:01:59 +0200527 With :class:`SelectorEventLoop` event loop, the socket *sock* must be
528 non-blocking.
Victor Stinnerec2ce092014-07-29 23:12:22 +0200529
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500530 This method is a :ref:`coroutine <coroutine>`.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100531
Yury Selivanov55c50842016-06-08 12:48:15 -0400532 .. versionchanged:: 3.5.2
533 ``address`` no longer needs to be resolved. ``sock_connect``
534 will try to check if the *address* is already resolved by calling
535 :func:`socket.inet_pton`. If not,
536 :meth:`BaseEventLoop.getaddrinfo` will be used to resolve the
537 *address*.
538
Victor Stinnerc1567df2014-02-08 23:22:58 +0100539 .. seealso::
540
Yury Selivanov55c50842016-06-08 12:48:15 -0400541 :meth:`BaseEventLoop.create_connection`
542 and :func:`asyncio.open_connection() <open_connection>`.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100543
544
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100545.. coroutinemethod:: BaseEventLoop.sock_accept(sock)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100546
Yury Selivanov55c50842016-06-08 12:48:15 -0400547 Accept a connection. Modeled after blocking
548 :meth:`socket.socket.accept`.
549
550 The socket must be bound to an address and listening
Victor Stinnerc1567df2014-02-08 23:22:58 +0100551 for connections. The return value is a pair ``(conn, address)`` where *conn*
552 is a *new* socket object usable to send and receive data on the connection,
553 and *address* is the address bound to the socket on the other end of the
554 connection.
555
Victor Stinnerec2ce092014-07-29 23:12:22 +0200556 The socket *sock* must be non-blocking.
557
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500558 This method is a :ref:`coroutine <coroutine>`.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100559
560 .. seealso::
561
Yury Selivanov55c50842016-06-08 12:48:15 -0400562 :meth:`BaseEventLoop.create_server` and :func:`start_server`.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100563
564
565Resolve host name
566-----------------
Victor Stinnerea3183f2013-12-03 01:08:00 +0100567
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100568.. coroutinemethod:: BaseEventLoop.getaddrinfo(host, port, \*, family=0, type=0, proto=0, flags=0)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100569
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500570 This method is a :ref:`coroutine <coroutine>`, similar to
571 :meth:`socket.getaddrinfo` function but non-blocking.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100572
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100573.. coroutinemethod:: BaseEventLoop.getnameinfo(sockaddr, flags=0)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100574
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500575 This method is a :ref:`coroutine <coroutine>`, similar to
576 :meth:`socket.getnameinfo` function but non-blocking.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100577
578
Victor Stinner984600f2014-03-25 09:40:26 +0100579Connect pipes
580-------------
Victor Stinnerea3183f2013-12-03 01:08:00 +0100581
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200582On Windows with :class:`SelectorEventLoop`, these methods are not supported.
583Use :class:`ProactorEventLoop` to support pipes on Windows.
584
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100585.. coroutinemethod:: BaseEventLoop.connect_read_pipe(protocol_factory, pipe)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100586
Victor Stinnerd84fd732014-08-26 01:01:59 +0200587 Register read pipe in eventloop.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100588
589 *protocol_factory* should instantiate object with :class:`Protocol`
Victor Stinnera5b257a2014-05-29 00:14:03 +0200590 interface. *pipe* is a :term:`file-like object <file object>`.
591 Return pair ``(transport, protocol)``, where *transport* supports the
Victor Stinnerea3183f2013-12-03 01:08:00 +0100592 :class:`ReadTransport` interface.
593
Victor Stinnerd84fd732014-08-26 01:01:59 +0200594 With :class:`SelectorEventLoop` event loop, the *pipe* is set to
595 non-blocking mode.
596
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500597 This method is a :ref:`coroutine <coroutine>`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100598
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100599.. coroutinemethod:: BaseEventLoop.connect_write_pipe(protocol_factory, pipe)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100600
601 Register write pipe in eventloop.
602
603 *protocol_factory* should instantiate object with :class:`BaseProtocol`
Victor Stinner2cef3002014-10-23 22:38:46 +0200604 interface. *pipe* is :term:`file-like object <file object>`.
605 Return pair ``(transport, protocol)``, where *transport* supports
Victor Stinnerea3183f2013-12-03 01:08:00 +0100606 :class:`WriteTransport` interface.
607
Victor Stinnerd84fd732014-08-26 01:01:59 +0200608 With :class:`SelectorEventLoop` event loop, the *pipe* is set to
609 non-blocking mode.
610
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500611 This method is a :ref:`coroutine <coroutine>`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100612
Victor Stinner08444382014-02-02 22:43:39 +0100613.. seealso::
614
Victor Stinner984600f2014-03-25 09:40:26 +0100615 The :meth:`BaseEventLoop.subprocess_exec` and
616 :meth:`BaseEventLoop.subprocess_shell` methods.
Victor Stinner08444382014-02-02 22:43:39 +0100617
Victor Stinnerea3183f2013-12-03 01:08:00 +0100618
Victor Stinner8b863482014-01-27 10:07:50 +0100619UNIX signals
620------------
621
622Availability: UNIX only.
623
624.. method:: BaseEventLoop.add_signal_handler(signum, callback, \*args)
625
626 Add a handler for a signal.
627
628 Raise :exc:`ValueError` if the signal number is invalid or uncatchable.
629 Raise :exc:`RuntimeError` if there is a problem setting up the handler.
630
Victor Stinner8464c242014-11-28 13:15:41 +0100631 :ref:`Use functools.partial to pass keywords to the callback
632 <asyncio-pass-keywords>`.
633
Victor Stinner8b863482014-01-27 10:07:50 +0100634.. method:: BaseEventLoop.remove_signal_handler(sig)
635
636 Remove a handler for a signal.
637
638 Return ``True`` if a signal handler was removed, ``False`` if not.
639
640.. seealso::
641
642 The :mod:`signal` module.
643
644
Victor Stinnerea3183f2013-12-03 01:08:00 +0100645Executor
646--------
647
648Call a function in an :class:`~concurrent.futures.Executor` (pool of threads or
649pool of processes). By default, an event loop uses a thread pool executor
650(:class:`~concurrent.futures.ThreadPoolExecutor`).
651
Andrew Svetlov1c62b522015-10-01 09:48:08 +0300652.. coroutinemethod:: BaseEventLoop.run_in_executor(executor, func, \*args)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100653
Andrew Svetlov1c62b522015-10-01 09:48:08 +0300654 Arrange for a *func* to be called in the specified executor.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100655
Larry Hastings3732ed22014-03-15 21:13:56 -0700656 The *executor* argument should be an :class:`~concurrent.futures.Executor`
657 instance. The default executor is used if *executor* is ``None``.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100658
Andrew Svetlov1c62b522015-10-01 09:48:08 +0300659 :ref:`Use functools.partial to pass keywords to the *func*
Victor Stinner8464c242014-11-28 13:15:41 +0100660 <asyncio-pass-keywords>`.
661
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500662 This method is a :ref:`coroutine <coroutine>`.
663
Victor Stinnerea3183f2013-12-03 01:08:00 +0100664.. method:: BaseEventLoop.set_default_executor(executor)
665
666 Set the default executor used by :meth:`run_in_executor`.
667
668
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500669Error Handling API
670------------------
671
Martin Panterc04fb562016-02-10 05:44:01 +0000672Allows customizing how exceptions are handled in the event loop.
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500673
674.. method:: BaseEventLoop.set_exception_handler(handler)
675
676 Set *handler* as the new event loop exception handler.
677
678 If *handler* is ``None``, the default exception handler will
679 be set.
680
681 If *handler* is a callable object, it should have a
682 matching signature to ``(loop, context)``, where ``loop``
683 will be a reference to the active event loop, ``context``
684 will be a ``dict`` object (see :meth:`call_exception_handler`
685 documentation for details about context).
686
Yury Selivanov950204d2016-05-16 16:23:00 -0400687.. method:: BaseEventLoop.get_exception_handler()
688
689 Return the exception handler, or ``None`` if the default one
690 is in use.
691
692 .. versionadded:: 3.5.2
693
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500694.. method:: BaseEventLoop.default_exception_handler(context)
695
696 Default exception handler.
697
698 This is called when an exception occurs and no exception
699 handler is set, and can be called by a custom exception
700 handler that wants to defer to the default behavior.
701
702 *context* parameter has the same meaning as in
703 :meth:`call_exception_handler`.
704
705.. method:: BaseEventLoop.call_exception_handler(context)
706
707 Call the current event loop exception handler.
708
709 *context* is a ``dict`` object containing the following keys
710 (new keys may be introduced later):
711
712 * 'message': Error message;
713 * 'exception' (optional): Exception object;
714 * 'future' (optional): :class:`asyncio.Future` instance;
715 * 'handle' (optional): :class:`asyncio.Handle` instance;
716 * 'protocol' (optional): :ref:`Protocol <asyncio-protocol>` instance;
717 * 'transport' (optional): :ref:`Transport <asyncio-transport>` instance;
718 * 'socket' (optional): :class:`socket.socket` instance.
719
720 .. note::
721
722 Note: this method should not be overloaded in subclassed
723 event loops. For any custom exception handling, use
724 :meth:`set_exception_handler()` method.
725
Victor Stinner0f3e6bc2014-02-19 23:15:02 +0100726Debug mode
727----------
728
729.. method:: BaseEventLoop.get_debug()
730
Victor Stinner7b7120e2014-06-23 00:12:14 +0200731 Get the debug mode (:class:`bool`) of the event loop.
732
733 The default value is ``True`` if the environment variable
734 :envvar:`PYTHONASYNCIODEBUG` is set to a non-empty string, ``False``
735 otherwise.
Victor Stinner0f3e6bc2014-02-19 23:15:02 +0100736
Victor Stinner64d750b2014-06-18 03:25:23 +0200737 .. versionadded:: 3.4.2
738
Victor Stinner0f3e6bc2014-02-19 23:15:02 +0100739.. method:: BaseEventLoop.set_debug(enabled: bool)
740
741 Set the debug mode of the event loop.
742
Victor Stinner64d750b2014-06-18 03:25:23 +0200743 .. versionadded:: 3.4.2
744
Victor Stinner0f3e6bc2014-02-19 23:15:02 +0100745.. seealso::
746
Victor Stinner62511fd2014-06-23 00:36:11 +0200747 The :ref:`debug mode of asyncio <asyncio-debug-mode>`.
Victor Stinner0f3e6bc2014-02-19 23:15:02 +0100748
Victor Stinner8c462c52014-01-24 18:11:43 +0100749Server
750------
751
Victor Stinner8ebeb032014-07-11 23:47:40 +0200752.. class:: Server
Victor Stinner8c462c52014-01-24 18:11:43 +0100753
Victor Stinner8ebeb032014-07-11 23:47:40 +0200754 Server listening on sockets.
755
756 Object created by the :meth:`BaseEventLoop.create_server` method and the
R David Murray756f0b12015-01-29 19:53:33 -0500757 :func:`start_server` function. Don't instantiate the class directly.
Victor Stinner8c462c52014-01-24 18:11:43 +0100758
759 .. method:: close()
760
Victor Stinner4bfb14a2014-07-12 03:20:24 +0200761 Stop serving: close listening sockets and set the :attr:`sockets`
762 attribute to ``None``.
763
Berker Peksag49c9edf2016-01-20 07:14:22 +0200764 The sockets that represent existing incoming client connections are left
765 open.
Victor Stinner8ebeb032014-07-11 23:47:40 +0200766
Berker Peksag49c9edf2016-01-20 07:14:22 +0200767 The server is closed asynchronously, use the :meth:`wait_closed`
768 coroutine to wait until the server is closed.
Victor Stinner8c462c52014-01-24 18:11:43 +0100769
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100770 .. coroutinemethod:: wait_closed()
Victor Stinner8c462c52014-01-24 18:11:43 +0100771
Victor Stinner8ebeb032014-07-11 23:47:40 +0200772 Wait until the :meth:`close` method completes.
773
774 This method is a :ref:`coroutine <coroutine>`.
775
776 .. attribute:: sockets
777
778 List of :class:`socket.socket` objects the server is listening to, or
779 ``None`` if the server is closed.
Victor Stinner8c462c52014-01-24 18:11:43 +0100780
781
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500782Handle
783------
784
785.. class:: Handle
786
787 A callback wrapper object returned by :func:`BaseEventLoop.call_soon`,
788 :func:`BaseEventLoop.call_soon_threadsafe`, :func:`BaseEventLoop.call_later`,
789 and :func:`BaseEventLoop.call_at`.
790
791 .. method:: cancel()
792
Yury Selivanov1096f762015-06-25 13:49:52 -0400793 Cancel the call. If the callback is already canceled or executed,
794 this method has no effect.
Victor Stinneraea82292014-07-08 23:42:38 +0200795
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500796
Victor Stinner6888b962014-10-11 16:15:58 +0200797Event loop examples
Victor Stinnera092a612015-01-09 15:58:41 +0100798-------------------
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500799
Victor Stinner3e09e322013-12-03 01:22:06 +0100800.. _asyncio-hello-world-callback:
Victor Stinnerea3183f2013-12-03 01:08:00 +0100801
Victor Stinner7f314ed2014-10-15 18:49:16 +0200802Hello World with call_soon()
Victor Stinnera092a612015-01-09 15:58:41 +0100803^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinnerea3183f2013-12-03 01:08:00 +0100804
Victor Stinner7f314ed2014-10-15 18:49:16 +0200805Example using the :meth:`BaseEventLoop.call_soon` method to schedule a
806callback. The callback displays ``"Hello World"`` and then stops the event
807loop::
Victor Stinnerea3183f2013-12-03 01:08:00 +0100808
809 import asyncio
810
Victor Stinner7f314ed2014-10-15 18:49:16 +0200811 def hello_world(loop):
Victor Stinnerea3183f2013-12-03 01:08:00 +0100812 print('Hello World')
Victor Stinner7f314ed2014-10-15 18:49:16 +0200813 loop.stop()
Victor Stinnerea3183f2013-12-03 01:08:00 +0100814
815 loop = asyncio.get_event_loop()
Victor Stinner7f314ed2014-10-15 18:49:16 +0200816
817 # Schedule a call to hello_world()
818 loop.call_soon(hello_world, loop)
819
820 # Blocking call interrupted by loop.stop()
821 loop.run_forever()
822 loop.close()
Victor Stinnerea3183f2013-12-03 01:08:00 +0100823
Victor Stinner3e09e322013-12-03 01:22:06 +0100824.. seealso::
Victor Stinnerea3183f2013-12-03 01:08:00 +0100825
Victor Stinner6888b962014-10-11 16:15:58 +0200826 The :ref:`Hello World coroutine <asyncio-hello-world-coroutine>` example
827 uses a :ref:`coroutine <coroutine>`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100828
Victor Stinner8b863482014-01-27 10:07:50 +0100829
Victor Stinner7f314ed2014-10-15 18:49:16 +0200830.. _asyncio-date-callback:
831
832Display the current date with call_later()
Victor Stinnera092a612015-01-09 15:58:41 +0100833^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinner7f314ed2014-10-15 18:49:16 +0200834
835Example of callback displaying the current date every second. The callback uses
836the :meth:`BaseEventLoop.call_later` method to reschedule itself during 5
837seconds, and then stops the event loop::
838
839 import asyncio
840 import datetime
841
842 def display_date(end_time, loop):
843 print(datetime.datetime.now())
844 if (loop.time() + 1.0) < end_time:
845 loop.call_later(1, display_date, end_time, loop)
846 else:
847 loop.stop()
848
849 loop = asyncio.get_event_loop()
850
851 # Schedule the first call to display_date()
852 end_time = loop.time() + 5.0
853 loop.call_soon(display_date, end_time, loop)
854
855 # Blocking call interrupted by loop.stop()
856 loop.run_forever()
857 loop.close()
858
859.. seealso::
860
861 The :ref:`coroutine displaying the current date
862 <asyncio-date-coroutine>` example uses a :ref:`coroutine
863 <coroutine>`.
864
865
Victor Stinner04e6df32014-10-11 16:16:27 +0200866.. _asyncio-watch-read-event:
Victor Stinner8b863482014-01-27 10:07:50 +0100867
Victor Stinner04e6df32014-10-11 16:16:27 +0200868Watch a file descriptor for read events
Victor Stinnera092a612015-01-09 15:58:41 +0100869^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinner04e6df32014-10-11 16:16:27 +0200870
871Wait until a file descriptor received some data using the
872:meth:`BaseEventLoop.add_reader` method and then close the event loop::
873
874 import asyncio
Victor Stinnerccd8e342014-10-11 16:30:02 +0200875 try:
876 from socket import socketpair
877 except ImportError:
878 from asyncio.windows_utils import socketpair
Victor Stinner04e6df32014-10-11 16:16:27 +0200879
880 # Create a pair of connected file descriptors
Victor Stinnerccd8e342014-10-11 16:30:02 +0200881 rsock, wsock = socketpair()
Victor Stinner04e6df32014-10-11 16:16:27 +0200882 loop = asyncio.get_event_loop()
883
884 def reader():
885 data = rsock.recv(100)
886 print("Received:", data.decode())
Victor Stinner2cef3002014-10-23 22:38:46 +0200887 # We are done: unregister the file descriptor
Victor Stinner04e6df32014-10-11 16:16:27 +0200888 loop.remove_reader(rsock)
889 # Stop the event loop
890 loop.stop()
891
Victor Stinner2cef3002014-10-23 22:38:46 +0200892 # Register the file descriptor for read event
Victor Stinner04e6df32014-10-11 16:16:27 +0200893 loop.add_reader(rsock, reader)
894
895 # Simulate the reception of data from the network
896 loop.call_soon(wsock.send, 'abc'.encode())
897
898 # Run the event loop
899 loop.run_forever()
900
901 # We are done, close sockets and the event loop
902 rsock.close()
903 wsock.close()
904 loop.close()
905
906.. seealso::
907
908 The :ref:`register an open socket to wait for data using a protocol
909 <asyncio-register-socket>` example uses a low-level protocol created by the
910 :meth:`BaseEventLoop.create_connection` method.
911
912 The :ref:`register an open socket to wait for data using streams
913 <asyncio-register-socket-streams>` example uses high-level streams
914 created by the :func:`open_connection` function in a coroutine.
915
916
917Set signal handlers for SIGINT and SIGTERM
Victor Stinnera092a612015-01-09 15:58:41 +0100918^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Victor Stinner04e6df32014-10-11 16:16:27 +0200919
920Register handlers for signals :py:data:`SIGINT` and :py:data:`SIGTERM` using
921the :meth:`BaseEventLoop.add_signal_handler` method::
Victor Stinner8b863482014-01-27 10:07:50 +0100922
923 import asyncio
924 import functools
925 import os
926 import signal
927
928 def ask_exit(signame):
929 print("got signal %s: exit" % signame)
930 loop.stop()
931
932 loop = asyncio.get_event_loop()
933 for signame in ('SIGINT', 'SIGTERM'):
934 loop.add_signal_handler(getattr(signal, signame),
935 functools.partial(ask_exit, signame))
936
Serhiy Storchaka0424eaf2015-09-12 17:45:25 +0300937 print("Event loop running forever, press Ctrl+C to interrupt.")
Victor Stinner8b863482014-01-27 10:07:50 +0100938 print("pid %s: send SIGINT or SIGTERM to exit." % os.getpid())
Victor Stinner63b21a82014-07-05 15:38:59 +0200939 try:
940 loop.run_forever()
941 finally:
942 loop.close()
Victor Stinner2cef3002014-10-23 22:38:46 +0200943
944This example only works on UNIX.