blob: 2e529b1455168e4fec6aec4249fb4c7925b6e82b [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
Serhiy Storchaka4ecfa452016-05-16 09:31:54 +0300104 This operates as a :abbr:`FIFO (first-in, first-out)` queue, callbacks
105 are called in the order in which they are registered. Each callback
106 will be called exactly once.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100107
108 Any positional arguments after the callback will be passed to the
109 callback when it is called.
110
Yury Selivanov1096f762015-06-25 13:49:52 -0400111 An instance of :class:`asyncio.Handle` is returned, which can be
112 used to cancel the callback.
Yury Selivanov43ee1c12014-02-19 20:58:44 -0500113
Victor Stinner8464c242014-11-28 13:15:41 +0100114 :ref:`Use functools.partial to pass keywords to the callback
115 <asyncio-pass-keywords>`.
116
Victor Stinnerea3183f2013-12-03 01:08:00 +0100117.. method:: BaseEventLoop.call_soon_threadsafe(callback, \*args)
118
119 Like :meth:`call_soon`, but thread safe.
120
Victor Stinner83704962015-02-25 14:24:15 +0100121 See the :ref:`concurrency and multithreading <asyncio-multithreading>`
122 section of the documentation.
123
Victor Stinnerea3183f2013-12-03 01:08:00 +0100124
Victor Stinner45b27ed2014-02-01 02:36:43 +0100125.. _asyncio-delayed-calls:
126
Victor Stinnerea3183f2013-12-03 01:08:00 +0100127Delayed calls
128-------------
129
130The event loop has its own internal clock for computing timeouts.
131Which clock is used depends on the (platform-specific) event loop
132implementation; ideally it is a monotonic clock. This will generally be
133a different clock than :func:`time.time`.
134
Victor Stinnerfd9d3742014-02-18 09:37:43 +0100135.. note::
136
137 Timeouts (relative *delay* or absolute *when*) should not exceed one day.
138
Victor Stinner45b27ed2014-02-01 02:36:43 +0100139
Victor Stinnerea3183f2013-12-03 01:08:00 +0100140.. method:: BaseEventLoop.call_later(delay, callback, *args)
141
142 Arrange for the *callback* to be called after the given *delay*
143 seconds (either an int or float).
144
Yury Selivanov1096f762015-06-25 13:49:52 -0400145 An instance of :class:`asyncio.Handle` is returned, which can be
146 used to cancel the callback.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100147
148 *callback* will be called exactly once per call to :meth:`call_later`.
149 If two callbacks are scheduled for exactly the same time, it is
150 undefined which will be called first.
151
152 The optional positional *args* will be passed to the callback when it
153 is called. If you want the callback to be called with some named
154 arguments, use a closure or :func:`functools.partial`.
155
Victor Stinner8464c242014-11-28 13:15:41 +0100156 :ref:`Use functools.partial to pass keywords to the callback
157 <asyncio-pass-keywords>`.
158
Victor Stinnerea3183f2013-12-03 01:08:00 +0100159.. method:: BaseEventLoop.call_at(when, callback, *args)
160
161 Arrange for the *callback* to be called at the given absolute timestamp
Berker Peksagb5563992014-11-07 19:51:07 +0200162 *when* (an int or float), using the same time reference as
163 :meth:`BaseEventLoop.time`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100164
165 This method's behavior is the same as :meth:`call_later`.
166
Yury Selivanov1096f762015-06-25 13:49:52 -0400167 An instance of :class:`asyncio.Handle` is returned, which can be
168 used to cancel the callback.
169
Victor Stinner8464c242014-11-28 13:15:41 +0100170 :ref:`Use functools.partial to pass keywords to the callback
171 <asyncio-pass-keywords>`.
172
Victor Stinnerea3183f2013-12-03 01:08:00 +0100173.. method:: BaseEventLoop.time()
174
175 Return the current time, as a :class:`float` value, according to the
176 event loop's internal clock.
177
Victor Stinner3e09e322013-12-03 01:22:06 +0100178.. seealso::
179
180 The :func:`asyncio.sleep` function.
181
Victor Stinnerea3183f2013-12-03 01:08:00 +0100182
Yury Selivanov950204d2016-05-16 16:23:00 -0400183Futures
184-------
185
186.. method:: BaseEventLoop.create_future()
187
188 Create an :class:`asyncio.Future` object attached to the loop.
189
190 This is a preferred way to create futures in asyncio, as event
191 loop implementations can provide alternative implementations
192 of the Future class (with better performance or instrumentation).
193
194 .. versionadded:: 3.5.2
195
196
Yury Selivanovbb961342015-06-25 11:54:34 -0400197Tasks
198-----
Victor Stinner530ef2f2014-07-08 12:39:10 +0200199
200.. method:: BaseEventLoop.create_task(coro)
201
202 Schedule the execution of a :ref:`coroutine object <coroutine>`: wrap it in
203 a future. Return a :class:`Task` object.
204
205 Third-party event loops can use their own subclass of :class:`Task` for
206 interoperability. In this case, the result type is a subclass of
207 :class:`Task`.
208
Victor Stinner337e03f2014-08-11 01:11:13 +0200209 This method was added in Python 3.4.2. Use the :func:`async` function to
210 support also older Python versions.
Victor Stinner530ef2f2014-07-08 12:39:10 +0200211
212 .. versionadded:: 3.4.2
213
Yury Selivanov71854612015-05-11 16:28:27 -0400214.. method:: BaseEventLoop.set_task_factory(factory)
215
216 Set a task factory that will be used by
217 :meth:`BaseEventLoop.create_task`.
218
219 If *factory* is ``None`` the default task factory will be set.
220
221 If *factory* is a *callable*, it should have a signature matching
222 ``(loop, coro)``, where *loop* will be a reference to the active
223 event loop, *coro* will be a coroutine object. The callable
224 must return an :class:`asyncio.Future` compatible object.
225
226 .. versionadded:: 3.4.4
227
228.. method:: BaseEventLoop.get_task_factory()
229
230 Return a task factory, or ``None`` if the default one is in use.
231
232 .. versionadded:: 3.4.4
233
Victor Stinner530ef2f2014-07-08 12:39:10 +0200234
Victor Stinnerea3183f2013-12-03 01:08:00 +0100235Creating connections
Victor Stinner0c6f1ca2013-12-03 01:46:39 +0100236--------------------
Victor Stinnerea3183f2013-12-03 01:08:00 +0100237
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100238.. 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 +0100239
240 Create a streaming transport connection to a given Internet *host* and
Victor Stinnera6919aa2014-02-19 13:32:34 +0100241 *port*: socket family :py:data:`~socket.AF_INET` or
242 :py:data:`~socket.AF_INET6` depending on *host* (or *family* if specified),
243 socket type :py:data:`~socket.SOCK_STREAM`. *protocol_factory* must be a
244 callable returning a :ref:`protocol <asyncio-protocol>` instance.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100245
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500246 This method is a :ref:`coroutine <coroutine>` which will try to
Victor Stinnerea3183f2013-12-03 01:08:00 +0100247 establish the connection in the background. When successful, the
248 coroutine returns a ``(transport, protocol)`` pair.
249
250 The chronological synopsis of the underlying operation is as follows:
251
Victor Stinner9592edb2014-02-02 15:03:02 +0100252 #. The connection is established, and a :ref:`transport <asyncio-transport>`
Victor Stinnerea3183f2013-12-03 01:08:00 +0100253 is created to represent it.
254
255 #. *protocol_factory* is called without arguments and must return a
Victor Stinner9592edb2014-02-02 15:03:02 +0100256 :ref:`protocol <asyncio-protocol>` instance.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100257
258 #. The protocol instance is tied to the transport, and its
259 :meth:`connection_made` method is called.
260
261 #. The coroutine returns successfully with the ``(transport, protocol)``
262 pair.
263
264 The created transport is an implementation-dependent bidirectional stream.
265
266 .. note::
267 *protocol_factory* can be any kind of callable, not necessarily
268 a class. For example, if you want to use a pre-created
269 protocol instance, you can pass ``lambda: my_protocol``.
270
Martin Panterc04fb562016-02-10 05:44:01 +0000271 Options that change how the connection is created:
Victor Stinnerea3183f2013-12-03 01:08:00 +0100272
273 * *ssl*: if given and not false, a SSL/TLS transport is created
274 (by default a plain TCP transport is created). If *ssl* is
275 a :class:`ssl.SSLContext` object, this context is used to create
276 the transport; if *ssl* is :const:`True`, a context with some
277 unspecified default settings is used.
278
Berker Peksag9c1dba22014-09-28 00:00:58 +0300279 .. seealso:: :ref:`SSL/TLS security considerations <ssl-security>`
Antoine Pitrouc5e075f2014-03-22 18:19:11 +0100280
Victor Stinnerea3183f2013-12-03 01:08:00 +0100281 * *server_hostname*, is only for use together with *ssl*,
282 and sets or overrides the hostname that the target server's certificate
283 will be matched against. By default the value of the *host* argument
284 is used. If *host* is empty, there is no default and you must pass a
285 value for *server_hostname*. If *server_hostname* is an empty
286 string, hostname matching is disabled (which is a serious security
287 risk, allowing for man-in-the-middle-attacks).
288
289 * *family*, *proto*, *flags* are the optional address family, protocol
290 and flags to be passed through to getaddrinfo() for *host* resolution.
291 If given, these should all be integers from the corresponding
292 :mod:`socket` module constants.
293
294 * *sock*, if given, should be an existing, already connected
295 :class:`socket.socket` object to be used by the transport.
296 If *sock* is given, none of *host*, *port*, *family*, *proto*, *flags*
297 and *local_addr* should be specified.
298
299 * *local_addr*, if given, is a ``(local_host, local_port)`` tuple used
300 to bind the socket to locally. The *local_host* and *local_port*
301 are looked up using getaddrinfo(), similarly to *host* and *port*.
302
Victor Stinner60208a12015-09-15 22:41:52 +0200303 .. versionchanged:: 3.5
304
305 On Windows with :class:`ProactorEventLoop`, SSL/TLS is now supported.
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200306
Victor Stinnerc8ea8132014-01-23 11:02:09 +0100307 .. seealso::
308
309 The :func:`open_connection` function can be used to get a pair of
310 (:class:`StreamReader`, :class:`StreamWriter`) instead of a protocol.
311
Victor Stinnerea3183f2013-12-03 01:08:00 +0100312
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700313.. 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 +0100314
315 Create datagram connection: socket family :py:data:`~socket.AF_INET` or
316 :py:data:`~socket.AF_INET6` depending on *host* (or *family* if specified),
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700317 socket type :py:data:`~socket.SOCK_DGRAM`. *protocol_factory* must be a
318 callable returning a :ref:`protocol <asyncio-protocol>` instance.
Victor Stinnera6919aa2014-02-19 13:32:34 +0100319
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500320 This method is a :ref:`coroutine <coroutine>` which will try to
Victor Stinnera6919aa2014-02-19 13:32:34 +0100321 establish the connection in the background. When successful, the
322 coroutine returns a ``(transport, protocol)`` pair.
323
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700324 Options changing how the connection is created:
325
326 * *local_addr*, if given, is a ``(local_host, local_port)`` tuple used
327 to bind the socket to locally. The *local_host* and *local_port*
328 are looked up using :meth:`getaddrinfo`.
329
330 * *remote_addr*, if given, is a ``(remote_host, remote_port)`` tuple used
331 to connect the socket to a remote address. The *remote_host* and
332 *remote_port* are looked up using :meth:`getaddrinfo`.
333
334 * *family*, *proto*, *flags* are the optional address family, protocol
335 and flags to be passed through to :meth:`getaddrinfo` for *host*
336 resolution. If given, these should all be integers from the
337 corresponding :mod:`socket` module constants.
338
339 * *reuse_address* tells the kernel to reuse a local socket in
340 TIME_WAIT state, without waiting for its natural timeout to
341 expire. If not specified will automatically be set to True on
342 UNIX.
343
344 * *reuse_port* tells the kernel to allow this endpoint to be bound to the
345 same port as other existing endpoints are bound to, so long as they all
346 set this flag when being created. This option is not supported on Windows
347 and some UNIX's. If the :py:data:`~socket.SO_REUSEPORT` constant is not
348 defined then this capability is unsupported.
349
350 * *allow_broadcast* tells the kernel to allow this endpoint to send
351 messages to the broadcast address.
352
353 * *sock* can optionally be specified in order to use a preexisting,
354 already connected, :class:`socket.socket` object to be used by the
355 transport. If specified, *local_addr* and *remote_addr* should be omitted
356 (must be :const:`None`).
Victor Stinnera6919aa2014-02-19 13:32:34 +0100357
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200358 On Windows with :class:`ProactorEventLoop`, this method is not supported.
359
Victor Stinnerc7edffd2014-10-12 11:24:26 +0200360 See :ref:`UDP echo client protocol <asyncio-udp-echo-client-protocol>` and
361 :ref:`UDP echo server protocol <asyncio-udp-echo-server-protocol>` examples.
362
Victor Stinnera6919aa2014-02-19 13:32:34 +0100363
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100364.. coroutinemethod:: BaseEventLoop.create_unix_connection(protocol_factory, path, \*, ssl=None, sock=None, server_hostname=None)
Victor Stinnera6919aa2014-02-19 13:32:34 +0100365
366 Create UNIX connection: socket family :py:data:`~socket.AF_UNIX`, socket
367 type :py:data:`~socket.SOCK_STREAM`. The :py:data:`~socket.AF_UNIX` socket
368 family is used to communicate between processes on the same machine
369 efficiently.
370
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500371 This method is a :ref:`coroutine <coroutine>` which will try to
Victor Stinnera6919aa2014-02-19 13:32:34 +0100372 establish the connection in the background. When successful, the
373 coroutine returns a ``(transport, protocol)`` pair.
374
375 See the :meth:`BaseEventLoop.create_connection` method for parameters.
376
377 Availability: UNIX.
378
379
Victor Stinnerea3183f2013-12-03 01:08:00 +0100380Creating listening connections
381------------------------------
382
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700383.. 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 +0100384
Victor Stinner33f6abe2014-10-12 20:36:04 +0200385 Create a TCP server (socket type :data:`~socket.SOCK_STREAM`) bound to
386 *host* and *port*.
387
388 Return a :class:`Server` object, its :attr:`~Server.sockets` attribute
389 contains created sockets. Use the :meth:`Server.close` method to stop the
390 server: close listening sockets.
391
392 Parameters:
393
Victor Stinner5e4a7d82015-09-21 18:33:43 +0200394 * The *host* parameter can be a string, in that case the TCP server is
395 bound to *host* and *port*. The *host* parameter can also be a sequence
396 of strings and in that case the TCP server is bound to all hosts of the
397 sequence. If *host* is an empty string or ``None``, all interfaces are
398 assumed and a list of multiple sockets will be returned (most likely one
399 for IPv4 and another one for IPv6).
Victor Stinner33f6abe2014-10-12 20:36:04 +0200400
401 * *family* can be set to either :data:`socket.AF_INET` or
402 :data:`~socket.AF_INET6` to force the socket to use IPv4 or IPv6. If not set
403 it will be determined from host (defaults to :data:`socket.AF_UNSPEC`).
404
405 * *flags* is a bitmask for :meth:`getaddrinfo`.
406
407 * *sock* can optionally be specified in order to use a preexisting
408 socket object. If specified, *host* and *port* should be omitted (must be
409 :const:`None`).
410
411 * *backlog* is the maximum number of queued connections passed to
412 :meth:`~socket.socket.listen` (defaults to 100).
413
414 * *ssl* can be set to an :class:`~ssl.SSLContext` to enable SSL over the
415 accepted connections.
416
417 * *reuse_address* tells the kernel to reuse a local socket in
418 TIME_WAIT state, without waiting for its natural timeout to
419 expire. If not specified will automatically be set to True on
420 UNIX.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100421
Guido van Rossumb9bf9132015-10-05 09:15:28 -0700422 * *reuse_port* tells the kernel to allow this endpoint to be bound to the
423 same port as other existing endpoints are bound to, so long as they all
424 set this flag when being created. This option is not supported on
425 Windows.
426
Victor Stinnerd1432092014-06-19 17:11:49 +0200427 This method is a :ref:`coroutine <coroutine>`.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100428
Victor Stinner60208a12015-09-15 22:41:52 +0200429 .. versionchanged:: 3.5
430
431 On Windows with :class:`ProactorEventLoop`, SSL/TLS is now supported.
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200432
Victor Stinnerc8ea8132014-01-23 11:02:09 +0100433 .. seealso::
434
435 The function :func:`start_server` creates a (:class:`StreamReader`,
436 :class:`StreamWriter`) pair and calls back a function with this pair.
437
Victor Stinner7b58a2b2015-09-21 18:41:05 +0200438 .. versionchanged:: 3.5.1
Victor Stinner5e4a7d82015-09-21 18:33:43 +0200439
440 The *host* parameter can now be a sequence of strings.
441
Victor Stinnerea3183f2013-12-03 01:08:00 +0100442
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100443.. coroutinemethod:: BaseEventLoop.create_unix_server(protocol_factory, path=None, \*, sock=None, backlog=100, ssl=None)
Victor Stinnerea3183f2013-12-03 01:08:00 +0100444
Victor Stinnera6919aa2014-02-19 13:32:34 +0100445 Similar to :meth:`BaseEventLoop.create_server`, but specific to the
446 socket family :py:data:`~socket.AF_UNIX`.
447
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100448 This method is a :ref:`coroutine <coroutine>`.
449
Victor Stinnera6919aa2014-02-19 13:32:34 +0100450 Availability: UNIX.
Victor Stinnerea3183f2013-12-03 01:08:00 +0100451
452
Victor Stinnerc1567df2014-02-08 23:22:58 +0100453Watch file descriptors
454----------------------
455
Victor Stinner41f3c3f2014-08-31 14:47:37 +0200456On Windows with :class:`SelectorEventLoop`, only socket handles are supported
457(ex: pipe file descriptors are not supported).
458
459On Windows with :class:`ProactorEventLoop`, these methods are not supported.
460
Victor Stinnerc1567df2014-02-08 23:22:58 +0100461.. method:: BaseEventLoop.add_reader(fd, callback, \*args)
462
463 Start watching the file descriptor for read availability and then call the
464 *callback* with specified arguments.
465
Victor Stinner8464c242014-11-28 13:15:41 +0100466 :ref:`Use functools.partial to pass keywords to the callback
467 <asyncio-pass-keywords>`.
468
Victor Stinnerc1567df2014-02-08 23:22:58 +0100469.. method:: BaseEventLoop.remove_reader(fd)
470
471 Stop watching the file descriptor for read availability.
472
473.. method:: BaseEventLoop.add_writer(fd, callback, \*args)
474
475 Start watching the file descriptor for write availability and then call the
476 *callback* with specified arguments.
477
Victor Stinner8464c242014-11-28 13:15:41 +0100478 :ref:`Use functools.partial to pass keywords to the callback
479 <asyncio-pass-keywords>`.
480
Victor Stinnerc1567df2014-02-08 23:22:58 +0100481.. method:: BaseEventLoop.remove_writer(fd)
482
483 Stop watching the file descriptor for write availability.
484
Victor Stinner04e6df32014-10-11 16:16:27 +0200485The :ref:`watch a file descriptor for read events <asyncio-watch-read-event>`
486example uses the low-level :meth:`BaseEventLoop.add_reader` method to register
487the file descriptor of a socket.
488
Victor Stinnerc1567df2014-02-08 23:22:58 +0100489
490Low-level socket operations
491---------------------------
492
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100493.. coroutinemethod:: BaseEventLoop.sock_recv(sock, nbytes)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100494
495 Receive data from the socket. The return value is a bytes object
496 representing the data received. The maximum amount of data to be received
497 at once is specified by *nbytes*.
498
Victor Stinnerd84fd732014-08-26 01:01:59 +0200499 With :class:`SelectorEventLoop` event loop, the socket *sock* must be
500 non-blocking.
Victor Stinnerec2ce092014-07-29 23:12:22 +0200501
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500502 This method is a :ref:`coroutine <coroutine>`.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100503
504 .. seealso::
505
506 The :meth:`socket.socket.recv` method.
507
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100508.. coroutinemethod:: BaseEventLoop.sock_sendall(sock, data)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100509
510 Send data to the socket. The socket must be connected to a remote socket.
511 This method continues to send data from *data* until either all data has
512 been sent or an error occurs. ``None`` is returned on success. On error,
513 an exception is raised, and there is no way to determine how much data, if
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500514 any, was successfully processed by the receiving end of the connection.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100515
Victor Stinnerd84fd732014-08-26 01:01:59 +0200516 With :class:`SelectorEventLoop` event loop, the socket *sock* must be
517 non-blocking.
Victor Stinnerec2ce092014-07-29 23:12:22 +0200518
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500519 This method is a :ref:`coroutine <coroutine>`.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100520
521 .. seealso::
522
523 The :meth:`socket.socket.sendall` method.
524
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100525.. coroutinemethod:: BaseEventLoop.sock_connect(sock, address)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100526
527 Connect to a remote socket at *address*.
528
Victor Stinner1b0580b2014-02-13 09:24:37 +0100529 The *address* must be already resolved to avoid the trap of hanging the
530 entire event loop when the address requires doing a DNS lookup. For
Serhiy Storchaka6a7b3a72016-04-17 08:32:47 +0300531 example, it must be an IP address, not a hostname, for
Victor Stinner1b0580b2014-02-13 09:24:37 +0100532 :py:data:`~socket.AF_INET` and :py:data:`~socket.AF_INET6` address families.
533 Use :meth:`getaddrinfo` to resolve the hostname asynchronously.
534
Victor Stinnerd84fd732014-08-26 01:01:59 +0200535 With :class:`SelectorEventLoop` event loop, the socket *sock* must be
536 non-blocking.
Victor Stinnerec2ce092014-07-29 23:12:22 +0200537
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500538 This method is a :ref:`coroutine <coroutine>`.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100539
540 .. seealso::
541
542 The :meth:`BaseEventLoop.create_connection` method, the
543 :func:`open_connection` function and the :meth:`socket.socket.connect`
544 method.
545
546
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100547.. coroutinemethod:: BaseEventLoop.sock_accept(sock)
Victor Stinnerc1567df2014-02-08 23:22:58 +0100548
549 Accept a connection. The socket must be bound to an address and listening
550 for connections. The return value is a pair ``(conn, address)`` where *conn*
551 is a *new* socket object usable to send and receive data on the connection,
552 and *address* is the address bound to the socket on the other end of the
553 connection.
554
Victor Stinnerec2ce092014-07-29 23:12:22 +0200555 The socket *sock* must be non-blocking.
556
Yury Selivanov37f15bc2014-02-20 16:20:44 -0500557 This method is a :ref:`coroutine <coroutine>`.
Victor Stinnerc1567df2014-02-08 23:22:58 +0100558
559 .. seealso::
560
561 The :meth:`BaseEventLoop.create_server` method, the :func:`start_server`
562 function and the :meth:`socket.socket.accept` method.
563
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.