| 
									
										
										
										
											2013-12-20 14:37:39 -05:00
										 |  |  | .. currentmodule:: asyncio
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-02 15:03:02 +01:00
										 |  |  | .. _asyncio-event-loop:
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-08 23:42:38 +02:00
										 |  |  | Base Event Loop
 | 
					
						
							|  |  |  | ===============
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | The event loop is the central execution device provided by :mod:`asyncio`.
 | 
					
						
							|  |  |  | It provides multiple facilities, amongst which:
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 06:07:47 -08:00
										 |  |  | * Registering, executing and cancelling delayed calls (timeouts).
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-02 15:03:02 +01:00
										 |  |  | * Creating client and server :ref:`transports <asyncio-transport>` for various
 | 
					
						
							| 
									
										
										
										
											2014-02-09 06:07:47 -08:00
										 |  |  |   kinds of communication.
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 06:55:58 -08:00
										 |  |  | * Launching subprocesses and the associated :ref:`transports
 | 
					
						
							|  |  |  |   <asyncio-transport>` for communication with an external program.
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 06:07:47 -08:00
										 |  |  | * Delegating costly function calls to a pool of threads.
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-08 23:42:38 +02:00
										 |  |  | .. class:: BaseEventLoop
 | 
					
						
							| 
									
										
										
										
											2014-02-09 06:55:58 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-08 23:42:38 +02:00
										 |  |  |    Base class of event loops.
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | Run an event loop
 | 
					
						
							|  |  |  | -----------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. method:: BaseEventLoop.run_forever()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Run until :meth:`stop` is called.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. method:: BaseEventLoop.run_until_complete(future)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-03 19:17:25 +01:00
										 |  |  |    Run until the :class:`Future` is done.
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-08 12:39:10 +02:00
										 |  |  |    If the argument is a :ref:`coroutine object <coroutine>`, it is wrapped by
 | 
					
						
							|  |  |  |    :func:`async`.
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |    Return the Future's result, or raise its exception.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. method:: BaseEventLoop.is_running()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Returns running status of event loop.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-03 02:05:42 +01:00
										 |  |  | .. method:: BaseEventLoop.stop()
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |    Stop running the event loop.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Every callback scheduled before :meth:`stop` is called will run.
 | 
					
						
							| 
									
										
										
										
											2014-07-24 11:36:33 +03:00
										 |  |  |    Callbacks scheduled after :meth:`stop` is called will not run.
 | 
					
						
							|  |  |  |    However, those callbacks will run if :meth:`run_forever` is called
 | 
					
						
							|  |  |  |    again later.
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-10 10:23:10 +02:00
										 |  |  | .. method:: BaseEventLoop.is_closed()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Returns ``True`` if the event loop was closed.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. versionadded:: 3.4.2
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | .. method:: BaseEventLoop.close()
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-24 02:59:02 -04:00
										 |  |  |    Close the event loop. The loop must not be running.
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |    This clears the queues and shuts down the executor, but does not wait for
 | 
					
						
							|  |  |  |    the executor to finish.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    This is idempotent and irreversible. No other methods should be called after
 | 
					
						
							|  |  |  |    this one.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Calls
 | 
					
						
							|  |  |  | -----
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. method:: BaseEventLoop.call_soon(callback, \*args)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Arrange for a callback to be called as soon as possible.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    This operates as a FIFO queue, callbacks are called in the order in
 | 
					
						
							|  |  |  |    which they are registered.  Each callback will be called exactly once.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Any positional arguments after the callback will be passed to the
 | 
					
						
							|  |  |  |    callback when it is called.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-19 20:58:44 -05:00
										 |  |  |    An instance of :class:`asyncio.Handle` is returned.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | .. method:: BaseEventLoop.call_soon_threadsafe(callback, \*args)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Like :meth:`call_soon`, but thread safe.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-01 02:36:43 +01:00
										 |  |  | .. _asyncio-delayed-calls:
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | Delayed calls
 | 
					
						
							|  |  |  | -------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The event loop has its own internal clock for computing timeouts.
 | 
					
						
							|  |  |  | Which clock is used depends on the (platform-specific) event loop
 | 
					
						
							|  |  |  | implementation; ideally it is a monotonic clock.  This will generally be
 | 
					
						
							|  |  |  | a different clock than :func:`time.time`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-18 09:37:43 +01:00
										 |  |  | .. note::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Timeouts (relative *delay* or absolute *when*) should not exceed one day.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-01 02:36:43 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | .. method:: BaseEventLoop.call_later(delay, callback, *args)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Arrange for the *callback* to be called after the given *delay*
 | 
					
						
							|  |  |  |    seconds (either an int or float).
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-19 20:58:44 -05:00
										 |  |  |    An instance of :class:`asyncio.Handle` is returned.
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |    *callback* will be called exactly once per call to :meth:`call_later`.
 | 
					
						
							|  |  |  |    If two callbacks are scheduled for exactly the same time, it is
 | 
					
						
							|  |  |  |    undefined which will be called first.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    The optional positional *args* will be passed to the callback when it
 | 
					
						
							|  |  |  |    is called. If you want the callback to be called with some named
 | 
					
						
							|  |  |  |    arguments, use a closure or :func:`functools.partial`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. method:: BaseEventLoop.call_at(when, callback, *args)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Arrange for the *callback* to be called at the given absolute timestamp
 | 
					
						
							|  |  |  |    *when* (an int or float), using the same time reference as :meth:`time`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    This method's behavior is the same as :meth:`call_later`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. method:: BaseEventLoop.time()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Return the current time, as a :class:`float` value, according to the
 | 
					
						
							|  |  |  |    event loop's internal clock.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:22:06 +01:00
										 |  |  | .. seealso::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    The :func:`asyncio.sleep` function.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-08 12:39:10 +02:00
										 |  |  | Coroutines
 | 
					
						
							|  |  |  | ----------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. method:: BaseEventLoop.create_task(coro)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Schedule the execution of a :ref:`coroutine object <coroutine>`: wrap it in
 | 
					
						
							|  |  |  |    a future. Return a :class:`Task` object.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Third-party event loops can use their own subclass of :class:`Task` for
 | 
					
						
							|  |  |  |    interoperability. In this case, the result type is a subclass of
 | 
					
						
							|  |  |  |    :class:`Task`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-11 01:11:13 +02:00
										 |  |  |    This method was added in Python 3.4.2. Use the :func:`async` function to
 | 
					
						
							|  |  |  |    support also older Python versions.
 | 
					
						
							| 
									
										
										
										
											2014-07-08 12:39:10 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. versionadded:: 3.4.2
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | Creating connections
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:46:39 +01:00
										 |  |  | --------------------
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | .. method:: 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)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Create a streaming transport connection to a given Internet *host* and
 | 
					
						
							| 
									
										
										
										
											2014-02-19 13:32:34 +01:00
										 |  |  |    *port*: socket family :py:data:`~socket.AF_INET` or
 | 
					
						
							|  |  |  |    :py:data:`~socket.AF_INET6` depending on *host* (or *family* if specified),
 | 
					
						
							|  |  |  |    socket type :py:data:`~socket.SOCK_STREAM`.  *protocol_factory* must be a
 | 
					
						
							|  |  |  |    callable returning a :ref:`protocol <asyncio-protocol>` instance.
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-20 16:20:44 -05:00
										 |  |  |    This method is a :ref:`coroutine <coroutine>` which will try to
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  |    establish the connection in the background.  When successful, the
 | 
					
						
							|  |  |  |    coroutine returns a ``(transport, protocol)`` pair.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    The chronological synopsis of the underlying operation is as follows:
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-02 15:03:02 +01:00
										 |  |  |    #. The connection is established, and a :ref:`transport <asyncio-transport>`
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  |       is created to represent it.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    #. *protocol_factory* is called without arguments and must return a
 | 
					
						
							| 
									
										
										
										
											2014-02-02 15:03:02 +01:00
										 |  |  |       :ref:`protocol <asyncio-protocol>` instance.
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |    #. The protocol instance is tied to the transport, and its
 | 
					
						
							|  |  |  |       :meth:`connection_made` method is called.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    #. The coroutine returns successfully with the ``(transport, protocol)``
 | 
					
						
							|  |  |  |       pair.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    The created transport is an implementation-dependent bidirectional stream.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. note::
 | 
					
						
							|  |  |  |       *protocol_factory* can be any kind of callable, not necessarily
 | 
					
						
							|  |  |  |       a class.  For example, if you want to use a pre-created
 | 
					
						
							|  |  |  |       protocol instance, you can pass ``lambda: my_protocol``.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Options allowing to change how the connection is created:
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    * *ssl*: if given and not false, a SSL/TLS transport is created
 | 
					
						
							|  |  |  |      (by default a plain TCP transport is created).  If *ssl* is
 | 
					
						
							|  |  |  |      a :class:`ssl.SSLContext` object, this context is used to create
 | 
					
						
							|  |  |  |      the transport; if *ssl* is :const:`True`, a context with some
 | 
					
						
							|  |  |  |      unspecified default settings is used.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-09-28 00:00:58 +03:00
										 |  |  |      .. seealso:: :ref:`SSL/TLS security considerations <ssl-security>`
 | 
					
						
							| 
									
										
										
										
											2014-03-22 18:19:11 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  |    * *server_hostname*, is only for use together with *ssl*,
 | 
					
						
							|  |  |  |      and sets or overrides the hostname that the target server's certificate
 | 
					
						
							|  |  |  |      will be matched against.  By default the value of the *host* argument
 | 
					
						
							|  |  |  |      is used.  If *host* is empty, there is no default and you must pass a
 | 
					
						
							|  |  |  |      value for *server_hostname*.  If *server_hostname* is an empty
 | 
					
						
							|  |  |  |      string, hostname matching is disabled (which is a serious security
 | 
					
						
							|  |  |  |      risk, allowing for man-in-the-middle-attacks).
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    * *family*, *proto*, *flags* are the optional address family, protocol
 | 
					
						
							|  |  |  |      and flags to be passed through to getaddrinfo() for *host* resolution.
 | 
					
						
							|  |  |  |      If given, these should all be integers from the corresponding
 | 
					
						
							|  |  |  |      :mod:`socket` module constants.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    * *sock*, if given, should be an existing, already connected
 | 
					
						
							|  |  |  |      :class:`socket.socket` object to be used by the transport.
 | 
					
						
							|  |  |  |      If *sock* is given, none of *host*, *port*, *family*, *proto*, *flags*
 | 
					
						
							|  |  |  |      and *local_addr* should be specified.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    * *local_addr*, if given, is a ``(local_host, local_port)`` tuple used
 | 
					
						
							|  |  |  |      to bind the socket to locally.  The *local_host* and *local_port*
 | 
					
						
							|  |  |  |      are looked up using getaddrinfo(), similarly to *host* and *port*.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-31 14:47:37 +02:00
										 |  |  |    On Windows with :class:`ProactorEventLoop`, SSL/TLS is not supported.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-23 11:02:09 +01:00
										 |  |  |    .. seealso::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       The :func:`open_connection` function can be used to get a pair of
 | 
					
						
							|  |  |  |       (:class:`StreamReader`, :class:`StreamWriter`) instead of a protocol.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-19 13:32:34 +01:00
										 |  |  | .. method:: BaseEventLoop.create_datagram_endpoint(protocol_factory, local_addr=None, remote_addr=None, \*, family=0, proto=0, flags=0)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Create datagram connection: socket family :py:data:`~socket.AF_INET` or
 | 
					
						
							|  |  |  |    :py:data:`~socket.AF_INET6` depending on *host* (or *family* if specified),
 | 
					
						
							|  |  |  |    socket type :py:data:`~socket.SOCK_DGRAM`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-20 16:20:44 -05:00
										 |  |  |    This method is a :ref:`coroutine <coroutine>` which will try to
 | 
					
						
							| 
									
										
										
										
											2014-02-19 13:32:34 +01:00
										 |  |  |    establish the connection in the background.  When successful, the
 | 
					
						
							|  |  |  |    coroutine returns a ``(transport, protocol)`` pair.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    See the :meth:`BaseEventLoop.create_connection` method for parameters.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-31 14:47:37 +02:00
										 |  |  |    On Windows with :class:`ProactorEventLoop`, this method is not supported.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-10-12 11:24:26 +02:00
										 |  |  |    See :ref:`UDP echo client protocol <asyncio-udp-echo-client-protocol>` and
 | 
					
						
							|  |  |  |    :ref:`UDP echo server protocol <asyncio-udp-echo-server-protocol>` examples.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-19 13:32:34 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | .. method:: BaseEventLoop.create_unix_connection(protocol_factory, path, \*, ssl=None, sock=None, server_hostname=None)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Create UNIX connection: socket family :py:data:`~socket.AF_UNIX`, socket
 | 
					
						
							|  |  |  |    type :py:data:`~socket.SOCK_STREAM`. The :py:data:`~socket.AF_UNIX` socket
 | 
					
						
							|  |  |  |    family is used to communicate between processes on the same machine
 | 
					
						
							|  |  |  |    efficiently.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-20 16:20:44 -05:00
										 |  |  |    This method is a :ref:`coroutine <coroutine>` which will try to
 | 
					
						
							| 
									
										
										
										
											2014-02-19 13:32:34 +01:00
										 |  |  |    establish the connection in the background.  When successful, the
 | 
					
						
							|  |  |  |    coroutine returns a ``(transport, protocol)`` pair.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    See the :meth:`BaseEventLoop.create_connection` method for parameters.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Availability: UNIX.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | Creating listening connections
 | 
					
						
							|  |  |  | ------------------------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. method:: 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)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-10-12 20:36:04 +02:00
										 |  |  |    Create a TCP server (socket type :data:`~socket.SOCK_STREAM`) bound to
 | 
					
						
							|  |  |  |    *host* and *port*.
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-10-12 20:36:04 +02:00
										 |  |  |    Return a :class:`Server` object, its :attr:`~Server.sockets` attribute
 | 
					
						
							|  |  |  |    contains created sockets. Use the :meth:`Server.close` method to stop the
 | 
					
						
							|  |  |  |    server: close listening sockets.
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-10-12 20:36:04 +02:00
										 |  |  |    Parameters:
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-10-12 20:36:04 +02:00
										 |  |  |    * If *host* is an empty string or ``None``, all interfaces are assumed
 | 
					
						
							|  |  |  |      and a list of multiple sockets will be returned (most likely
 | 
					
						
							|  |  |  |      one for IPv4 and another one for IPv6).
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-10-12 20:36:04 +02:00
										 |  |  |    * *family* can be set to either :data:`socket.AF_INET` or
 | 
					
						
							|  |  |  |      :data:`~socket.AF_INET6` to force the socket to use IPv4 or IPv6. If not set
 | 
					
						
							|  |  |  |      it will be determined from host (defaults to :data:`socket.AF_UNSPEC`).
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-10-12 20:36:04 +02:00
										 |  |  |    * *flags* is a bitmask for :meth:`getaddrinfo`.
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-10-12 20:36:04 +02:00
										 |  |  |    * *sock* can optionally be specified in order to use a preexisting
 | 
					
						
							|  |  |  |      socket object. If specified, *host* and *port* should be omitted (must be
 | 
					
						
							|  |  |  |      :const:`None`).
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-10-12 20:36:04 +02:00
										 |  |  |    * *backlog* is the maximum number of queued connections passed to
 | 
					
						
							|  |  |  |      :meth:`~socket.socket.listen` (defaults to 100).
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-10-12 20:36:04 +02:00
										 |  |  |    * *ssl* can be set to an :class:`~ssl.SSLContext` to enable SSL over the
 | 
					
						
							|  |  |  |      accepted connections.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    * *reuse_address* tells the kernel to reuse a local socket in
 | 
					
						
							|  |  |  |      TIME_WAIT state, without waiting for its natural timeout to
 | 
					
						
							|  |  |  |      expire. If not specified will automatically be set to True on
 | 
					
						
							|  |  |  |      UNIX.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    This method is a :ref:`coroutine <coroutine>`.
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-31 14:47:37 +02:00
										 |  |  |    On Windows with :class:`ProactorEventLoop`, SSL/TLS is not supported.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-23 11:02:09 +01:00
										 |  |  |    .. seealso::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       The function :func:`start_server` creates a (:class:`StreamReader`,
 | 
					
						
							|  |  |  |       :class:`StreamWriter`) pair and calls back a function with this pair.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-19 13:32:34 +01:00
										 |  |  | .. method:: BaseEventLoop.create_unix_server(protocol_factory, path=None, \*, sock=None, backlog=100, ssl=None)
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-19 13:32:34 +01:00
										 |  |  |    Similar to :meth:`BaseEventLoop.create_server`, but specific to the
 | 
					
						
							|  |  |  |    socket family :py:data:`~socket.AF_UNIX`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Availability: UNIX.
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-08 23:22:58 +01:00
										 |  |  | Watch file descriptors
 | 
					
						
							|  |  |  | ----------------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-31 14:47:37 +02:00
										 |  |  | On Windows with :class:`SelectorEventLoop`, only socket handles are supported
 | 
					
						
							|  |  |  | (ex: pipe file descriptors are not supported).
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | On Windows with :class:`ProactorEventLoop`, these methods are not supported.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-08 23:22:58 +01:00
										 |  |  | .. method:: BaseEventLoop.add_reader(fd, callback, \*args)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Start watching the file descriptor for read availability and then call the
 | 
					
						
							|  |  |  |    *callback* with specified arguments.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. method:: BaseEventLoop.remove_reader(fd)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Stop watching the file descriptor for read availability.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. method:: BaseEventLoop.add_writer(fd, callback, \*args)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Start watching the file descriptor for write availability and then call the
 | 
					
						
							|  |  |  |    *callback* with specified arguments.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. method:: BaseEventLoop.remove_writer(fd)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Stop watching the file descriptor for write availability.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-10-11 16:16:27 +02:00
										 |  |  | The :ref:`watch a file descriptor for read events <asyncio-watch-read-event>`
 | 
					
						
							|  |  |  | example uses the low-level :meth:`BaseEventLoop.add_reader` method to register
 | 
					
						
							|  |  |  | the file descriptor of a socket.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-08 23:22:58 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | Low-level socket operations
 | 
					
						
							|  |  |  | ---------------------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. method:: BaseEventLoop.sock_recv(sock, nbytes)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Receive data from the socket.  The return value is a bytes object
 | 
					
						
							|  |  |  |    representing the data received.  The maximum amount of data to be received
 | 
					
						
							|  |  |  |    at once is specified by *nbytes*.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-26 01:01:59 +02:00
										 |  |  |    With :class:`SelectorEventLoop` event loop, the socket *sock* must be
 | 
					
						
							|  |  |  |    non-blocking.
 | 
					
						
							| 
									
										
										
										
											2014-07-29 23:12:22 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-20 16:20:44 -05:00
										 |  |  |    This method is a :ref:`coroutine <coroutine>`.
 | 
					
						
							| 
									
										
										
										
											2014-02-08 23:22:58 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. seealso::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       The :meth:`socket.socket.recv` method.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. method:: BaseEventLoop.sock_sendall(sock, data)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Send data to the socket.  The socket must be connected to a remote socket.
 | 
					
						
							|  |  |  |    This method continues to send data from *data* until either all data has
 | 
					
						
							|  |  |  |    been sent or an error occurs.  ``None`` is returned on success.  On error,
 | 
					
						
							|  |  |  |    an exception is raised, and there is no way to determine how much data, if
 | 
					
						
							| 
									
										
										
										
											2014-02-20 16:20:44 -05:00
										 |  |  |    any, was successfully processed by the receiving end of the connection.
 | 
					
						
							| 
									
										
										
										
											2014-02-08 23:22:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-26 01:01:59 +02:00
										 |  |  |    With :class:`SelectorEventLoop` event loop, the socket *sock* must be
 | 
					
						
							|  |  |  |    non-blocking.
 | 
					
						
							| 
									
										
										
										
											2014-07-29 23:12:22 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-20 16:20:44 -05:00
										 |  |  |    This method is a :ref:`coroutine <coroutine>`.
 | 
					
						
							| 
									
										
										
										
											2014-02-08 23:22:58 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. seealso::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       The :meth:`socket.socket.sendall` method.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. method:: BaseEventLoop.sock_connect(sock, address)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Connect to a remote socket at *address*.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-13 09:24:37 +01:00
										 |  |  |    The *address* must be already resolved to avoid the trap of hanging the
 | 
					
						
							|  |  |  |    entire event loop when the address requires doing a DNS lookup.  For
 | 
					
						
							|  |  |  |    example, it must be an IP address, not an hostname, for
 | 
					
						
							|  |  |  |    :py:data:`~socket.AF_INET` and :py:data:`~socket.AF_INET6` address families.
 | 
					
						
							|  |  |  |    Use :meth:`getaddrinfo` to resolve the hostname asynchronously.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-26 01:01:59 +02:00
										 |  |  |    With :class:`SelectorEventLoop` event loop, the socket *sock* must be
 | 
					
						
							|  |  |  |    non-blocking.
 | 
					
						
							| 
									
										
										
										
											2014-07-29 23:12:22 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-20 16:20:44 -05:00
										 |  |  |    This method is a :ref:`coroutine <coroutine>`.
 | 
					
						
							| 
									
										
										
										
											2014-02-08 23:22:58 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. seealso::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       The :meth:`BaseEventLoop.create_connection` method, the
 | 
					
						
							|  |  |  |       :func:`open_connection` function and the :meth:`socket.socket.connect`
 | 
					
						
							|  |  |  |       method.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. method:: BaseEventLoop.sock_accept(sock)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Accept a connection. The socket must be bound to an address and listening
 | 
					
						
							|  |  |  |    for connections. The return value is a pair ``(conn, address)`` where *conn*
 | 
					
						
							|  |  |  |    is a *new* socket object usable to send and receive data on the connection,
 | 
					
						
							|  |  |  |    and *address* is the address bound to the socket on the other end of the
 | 
					
						
							|  |  |  |    connection.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-29 23:12:22 +02:00
										 |  |  |    The socket *sock* must be non-blocking.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-20 16:20:44 -05:00
										 |  |  |    This method is a :ref:`coroutine <coroutine>`.
 | 
					
						
							| 
									
										
										
										
											2014-02-08 23:22:58 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. seealso::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       The :meth:`BaseEventLoop.create_server` method, the :func:`start_server`
 | 
					
						
							|  |  |  |       function and the :meth:`socket.socket.accept` method.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Resolve host name
 | 
					
						
							|  |  |  | -----------------
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | .. method:: BaseEventLoop.getaddrinfo(host, port, \*, family=0, type=0, proto=0, flags=0)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-20 16:20:44 -05:00
										 |  |  |    This method is a :ref:`coroutine <coroutine>`, similar to
 | 
					
						
							|  |  |  |    :meth:`socket.getaddrinfo` function but non-blocking.
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | .. method:: BaseEventLoop.getnameinfo(sockaddr, flags=0)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-20 16:20:44 -05:00
										 |  |  |    This method is a :ref:`coroutine <coroutine>`, similar to
 | 
					
						
							|  |  |  |    :meth:`socket.getnameinfo` function but non-blocking.
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-25 09:40:26 +01:00
										 |  |  | Connect pipes
 | 
					
						
							|  |  |  | -------------
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-31 14:47:37 +02:00
										 |  |  | On Windows with :class:`SelectorEventLoop`, these methods are not supported.
 | 
					
						
							|  |  |  | Use :class:`ProactorEventLoop` to support pipes on Windows.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | .. method:: BaseEventLoop.connect_read_pipe(protocol_factory, pipe)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-26 01:01:59 +02:00
										 |  |  |    Register read pipe in eventloop.
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |    *protocol_factory* should instantiate object with :class:`Protocol`
 | 
					
						
							| 
									
										
										
										
											2014-05-29 00:14:03 +02:00
										 |  |  |    interface.  *pipe* is a :term:`file-like object <file object>`.
 | 
					
						
							|  |  |  |    Return pair ``(transport, protocol)``, where *transport* supports the
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  |    :class:`ReadTransport` interface.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-26 01:01:59 +02:00
										 |  |  |    With :class:`SelectorEventLoop` event loop, the *pipe* is set to
 | 
					
						
							|  |  |  |    non-blocking mode.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-20 16:20:44 -05:00
										 |  |  |    This method is a :ref:`coroutine <coroutine>`.
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | .. method:: BaseEventLoop.connect_write_pipe(protocol_factory, pipe)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Register write pipe in eventloop.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    *protocol_factory* should instantiate object with :class:`BaseProtocol`
 | 
					
						
							| 
									
										
										
										
											2014-08-26 01:01:59 +02:00
										 |  |  |    interface. *pipe* is file-like object.
 | 
					
						
							| 
									
										
										
										
											2014-10-12 20:36:04 +02:00
										 |  |  |    Return pair (transport, protocol), where *transport* supports
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  |    :class:`WriteTransport` interface.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-26 01:01:59 +02:00
										 |  |  |    With :class:`SelectorEventLoop` event loop, the *pipe* is set to
 | 
					
						
							|  |  |  |    non-blocking mode.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-20 16:20:44 -05:00
										 |  |  |    This method is a :ref:`coroutine <coroutine>`.
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-02 22:43:39 +01:00
										 |  |  | .. seealso::
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-25 09:40:26 +01:00
										 |  |  |    The :meth:`BaseEventLoop.subprocess_exec` and
 | 
					
						
							|  |  |  |    :meth:`BaseEventLoop.subprocess_shell` methods.
 | 
					
						
							| 
									
										
										
										
											2014-02-02 22:43:39 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-27 10:07:50 +01:00
										 |  |  | UNIX signals
 | 
					
						
							|  |  |  | ------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Availability: UNIX only.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. method:: BaseEventLoop.add_signal_handler(signum, callback, \*args)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Add a handler for a signal.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Raise :exc:`ValueError` if the signal number is invalid or uncatchable.
 | 
					
						
							|  |  |  |    Raise :exc:`RuntimeError` if there is a problem setting up the handler.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. method:: BaseEventLoop.remove_signal_handler(sig)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Remove a handler for a signal.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Return ``True`` if a signal handler was removed, ``False`` if not.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. seealso::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    The :mod:`signal` module.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | Executor
 | 
					
						
							|  |  |  | --------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Call a function in an :class:`~concurrent.futures.Executor` (pool of threads or
 | 
					
						
							|  |  |  | pool of processes). By default, an event loop uses a thread pool executor
 | 
					
						
							|  |  |  | (:class:`~concurrent.futures.ThreadPoolExecutor`).
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. method:: BaseEventLoop.run_in_executor(executor, callback, \*args)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Arrange for a callback to be called in the specified executor.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-15 21:13:56 -07:00
										 |  |  |    The *executor* argument should be an :class:`~concurrent.futures.Executor`
 | 
					
						
							|  |  |  |    instance. The default executor is used if *executor* is ``None``.
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-20 16:20:44 -05:00
										 |  |  |    This method is a :ref:`coroutine <coroutine>`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | .. method:: BaseEventLoop.set_default_executor(executor)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Set the default executor used by :meth:`run_in_executor`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-19 20:58:44 -05:00
										 |  |  | Error Handling API
 | 
					
						
							|  |  |  | ------------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Allows to customize how exceptions are handled in the event loop.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. method:: BaseEventLoop.set_exception_handler(handler)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Set *handler* as the new event loop exception handler.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    If *handler* is ``None``, the default exception handler will
 | 
					
						
							|  |  |  |    be set.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    If *handler* is a callable object, it should have a
 | 
					
						
							|  |  |  |    matching signature to ``(loop, context)``, where ``loop``
 | 
					
						
							|  |  |  |    will be a reference to the active event loop, ``context``
 | 
					
						
							|  |  |  |    will be a ``dict`` object (see :meth:`call_exception_handler`
 | 
					
						
							|  |  |  |    documentation for details about context).
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. method:: BaseEventLoop.default_exception_handler(context)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Default exception handler.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    This is called when an exception occurs and no exception
 | 
					
						
							|  |  |  |    handler is set, and can be called by a custom exception
 | 
					
						
							|  |  |  |    handler that wants to defer to the default behavior.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    *context* parameter has the same meaning as in
 | 
					
						
							|  |  |  |    :meth:`call_exception_handler`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. method:: BaseEventLoop.call_exception_handler(context)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Call the current event loop exception handler.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    *context* is a ``dict`` object containing the following keys
 | 
					
						
							|  |  |  |    (new keys may be introduced later):
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    * 'message': Error message;
 | 
					
						
							|  |  |  |    * 'exception' (optional): Exception object;
 | 
					
						
							|  |  |  |    * 'future' (optional): :class:`asyncio.Future` instance;
 | 
					
						
							|  |  |  |    * 'handle' (optional): :class:`asyncio.Handle` instance;
 | 
					
						
							|  |  |  |    * 'protocol' (optional): :ref:`Protocol <asyncio-protocol>` instance;
 | 
					
						
							|  |  |  |    * 'transport' (optional): :ref:`Transport <asyncio-transport>` instance;
 | 
					
						
							|  |  |  |    * 'socket' (optional): :class:`socket.socket` instance.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. note::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |        Note: this method should not be overloaded in subclassed
 | 
					
						
							|  |  |  |        event loops.  For any custom exception handling, use
 | 
					
						
							|  |  |  |        :meth:`set_exception_handler()` method.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-19 23:15:02 +01:00
										 |  |  | Debug mode
 | 
					
						
							|  |  |  | ----------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. method:: BaseEventLoop.get_debug()
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-23 00:12:14 +02:00
										 |  |  |    Get the debug mode (:class:`bool`) of the event loop.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    The default value is ``True`` if the environment variable
 | 
					
						
							|  |  |  |    :envvar:`PYTHONASYNCIODEBUG` is set to a non-empty string, ``False``
 | 
					
						
							|  |  |  |    otherwise.
 | 
					
						
							| 
									
										
										
										
											2014-02-19 23:15:02 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-18 03:25:23 +02:00
										 |  |  |    .. versionadded:: 3.4.2
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-19 23:15:02 +01:00
										 |  |  | .. method:: BaseEventLoop.set_debug(enabled: bool)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Set the debug mode of the event loop.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-18 03:25:23 +02:00
										 |  |  |    .. versionadded:: 3.4.2
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-19 23:15:02 +01:00
										 |  |  | .. seealso::
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-23 00:36:11 +02:00
										 |  |  |    The :ref:`debug mode of asyncio <asyncio-debug-mode>`.
 | 
					
						
							| 
									
										
										
										
											2014-02-19 23:15:02 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-24 18:11:43 +01:00
										 |  |  | Server
 | 
					
						
							|  |  |  | ------
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-11 23:47:40 +02:00
										 |  |  | .. class:: Server
 | 
					
						
							| 
									
										
										
										
											2014-01-24 18:11:43 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-11 23:47:40 +02:00
										 |  |  |    Server listening on sockets.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Object created by the :meth:`BaseEventLoop.create_server` method and the
 | 
					
						
							|  |  |  |    :func:`start_server` function. Don't instanciate the class directly.
 | 
					
						
							| 
									
										
										
										
											2014-01-24 18:11:43 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. method:: close()
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-12 03:20:24 +02:00
										 |  |  |       Stop serving: close listening sockets and set the :attr:`sockets`
 | 
					
						
							|  |  |  |       attribute to ``None``.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       The sockets that represent existing incoming client connections are
 | 
					
						
							|  |  |  |       leaved open.
 | 
					
						
							| 
									
										
										
										
											2014-07-11 23:47:40 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |       The server is closed asynchonously, use the :meth:`wait_closed` coroutine
 | 
					
						
							|  |  |  |       to wait until the server is closed.
 | 
					
						
							| 
									
										
										
										
											2014-01-24 18:11:43 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. method:: wait_closed()
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-11 23:47:40 +02:00
										 |  |  |       Wait until the :meth:`close` method completes.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       This method is a :ref:`coroutine <coroutine>`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. attribute:: sockets
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       List of :class:`socket.socket` objects the server is listening to, or
 | 
					
						
							|  |  |  |       ``None`` if the server is closed.
 | 
					
						
							| 
									
										
										
										
											2014-01-24 18:11:43 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-19 20:58:44 -05:00
										 |  |  | Handle
 | 
					
						
							|  |  |  | ------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. class:: Handle
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    A callback wrapper object returned by :func:`BaseEventLoop.call_soon`,
 | 
					
						
							|  |  |  |    :func:`BaseEventLoop.call_soon_threadsafe`, :func:`BaseEventLoop.call_later`,
 | 
					
						
							|  |  |  |    and :func:`BaseEventLoop.call_at`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. method:: cancel()
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-08 23:42:38 +02:00
										 |  |  |       Cancel the call.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-19 20:58:44 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-10-11 16:15:58 +02:00
										 |  |  | Event loop examples
 | 
					
						
							|  |  |  | ===================
 | 
					
						
							| 
									
										
										
										
											2014-02-19 20:58:44 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:22:06 +01:00
										 |  |  | .. _asyncio-hello-world-callback:
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-10-15 18:49:16 +02:00
										 |  |  | Hello World with call_soon()
 | 
					
						
							|  |  |  | ----------------------------
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-10-15 18:49:16 +02:00
										 |  |  | Example using the :meth:`BaseEventLoop.call_soon` method to schedule a
 | 
					
						
							|  |  |  | callback. The callback displays ``"Hello World"`` and then stops the event
 | 
					
						
							|  |  |  | loop::
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     import asyncio
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-10-15 18:49:16 +02:00
										 |  |  |     def hello_world(loop):
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  |         print('Hello World')
 | 
					
						
							| 
									
										
										
										
											2014-10-15 18:49:16 +02:00
										 |  |  |         loop.stop()
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     loop = asyncio.get_event_loop()
 | 
					
						
							| 
									
										
										
										
											2014-10-15 18:49:16 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # Schedule a call to hello_world()
 | 
					
						
							|  |  |  |     loop.call_soon(hello_world, loop)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Blocking call interrupted by loop.stop()
 | 
					
						
							|  |  |  |     loop.run_forever()
 | 
					
						
							|  |  |  |     loop.close()
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:22:06 +01:00
										 |  |  | .. seealso::
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-10-11 16:15:58 +02:00
										 |  |  |    The :ref:`Hello World coroutine <asyncio-hello-world-coroutine>` example
 | 
					
						
							|  |  |  |    uses a :ref:`coroutine <coroutine>`.
 | 
					
						
							| 
									
										
										
										
											2013-12-03 01:08:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-27 10:07:50 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-10-15 18:49:16 +02:00
										 |  |  | .. _asyncio-date-callback:
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Display the current date with call_later()
 | 
					
						
							|  |  |  | ------------------------------------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Example of callback displaying the current date every second. The callback uses
 | 
					
						
							|  |  |  | the :meth:`BaseEventLoop.call_later` method to reschedule itself during 5
 | 
					
						
							|  |  |  | seconds, and then stops the event loop::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     import asyncio
 | 
					
						
							|  |  |  |     import datetime
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def display_date(end_time, loop):
 | 
					
						
							|  |  |  |         print(datetime.datetime.now())
 | 
					
						
							|  |  |  |         if (loop.time() + 1.0) < end_time:
 | 
					
						
							|  |  |  |             loop.call_later(1, display_date, end_time, loop)
 | 
					
						
							|  |  |  |         else:
 | 
					
						
							|  |  |  |             loop.stop()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     loop = asyncio.get_event_loop()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Schedule the first call to display_date()
 | 
					
						
							|  |  |  |     end_time = loop.time() + 5.0
 | 
					
						
							|  |  |  |     loop.call_soon(display_date, end_time, loop)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Blocking call interrupted by loop.stop()
 | 
					
						
							|  |  |  |     loop.run_forever()
 | 
					
						
							|  |  |  |     loop.close()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. seealso::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    The :ref:`coroutine displaying the current date
 | 
					
						
							|  |  |  |    <asyncio-date-coroutine>` example uses a :ref:`coroutine
 | 
					
						
							|  |  |  |    <coroutine>`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-10-11 16:16:27 +02:00
										 |  |  | .. _asyncio-watch-read-event:
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Watch a file descriptor for read events
 | 
					
						
							|  |  |  | ---------------------------------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Wait until a file descriptor received some data using the
 | 
					
						
							|  |  |  | :meth:`BaseEventLoop.add_reader` method and then close the event loop::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     import asyncio
 | 
					
						
							| 
									
										
										
										
											2014-10-11 16:30:02 +02:00
										 |  |  |     try:
 | 
					
						
							|  |  |  |         from socket import socketpair
 | 
					
						
							|  |  |  |     except ImportError:
 | 
					
						
							|  |  |  |         from asyncio.windows_utils import socketpair
 | 
					
						
							| 
									
										
										
										
											2014-10-11 16:16:27 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # Create a pair of connected file descriptors
 | 
					
						
							| 
									
										
										
										
											2014-10-11 16:30:02 +02:00
										 |  |  |     rsock, wsock = socketpair()
 | 
					
						
							| 
									
										
										
										
											2014-10-11 16:16:27 +02:00
										 |  |  |     loop = asyncio.get_event_loop()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def reader():
 | 
					
						
							|  |  |  |         data = rsock.recv(100)
 | 
					
						
							|  |  |  |         print("Received:", data.decode())
 | 
					
						
							|  |  |  |         # We are done: unregister the register
 | 
					
						
							|  |  |  |         loop.remove_reader(rsock)
 | 
					
						
							|  |  |  |         # Stop the event loop
 | 
					
						
							|  |  |  |         loop.stop()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Wait for read event
 | 
					
						
							|  |  |  |     loop.add_reader(rsock, reader)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Simulate the reception of data from the network
 | 
					
						
							|  |  |  |     loop.call_soon(wsock.send, 'abc'.encode())
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Run the event loop
 | 
					
						
							|  |  |  |     loop.run_forever()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # We are done, close sockets and the event loop
 | 
					
						
							|  |  |  |     rsock.close()
 | 
					
						
							|  |  |  |     wsock.close()
 | 
					
						
							|  |  |  |     loop.close()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. seealso::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    The :ref:`register an open socket to wait for data using a protocol
 | 
					
						
							|  |  |  |    <asyncio-register-socket>` example uses a low-level protocol created by the
 | 
					
						
							|  |  |  |    :meth:`BaseEventLoop.create_connection` method.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    The :ref:`register an open socket to wait for data using streams
 | 
					
						
							|  |  |  |    <asyncio-register-socket-streams>` example uses high-level streams
 | 
					
						
							|  |  |  |    created by the :func:`open_connection` function in a coroutine.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-27 10:07:50 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-10-11 16:16:27 +02:00
										 |  |  | Set signal handlers for SIGINT and SIGTERM
 | 
					
						
							|  |  |  | ------------------------------------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Register handlers for signals :py:data:`SIGINT` and :py:data:`SIGTERM` using
 | 
					
						
							|  |  |  | the :meth:`BaseEventLoop.add_signal_handler` method::
 | 
					
						
							| 
									
										
										
										
											2014-01-27 10:07:50 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     import asyncio
 | 
					
						
							|  |  |  |     import functools
 | 
					
						
							|  |  |  |     import os
 | 
					
						
							|  |  |  |     import signal
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def ask_exit(signame):
 | 
					
						
							|  |  |  |         print("got signal %s: exit" % signame)
 | 
					
						
							|  |  |  |         loop.stop()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     loop = asyncio.get_event_loop()
 | 
					
						
							|  |  |  |     for signame in ('SIGINT', 'SIGTERM'):
 | 
					
						
							|  |  |  |         loop.add_signal_handler(getattr(signal, signame),
 | 
					
						
							|  |  |  |                                 functools.partial(ask_exit, signame))
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     print("Event loop running forever, press CTRL+c to interrupt.")
 | 
					
						
							|  |  |  |     print("pid %s: send SIGINT or SIGTERM to exit." % os.getpid())
 | 
					
						
							| 
									
										
										
										
											2014-07-05 15:38:59 +02:00
										 |  |  |     try:
 | 
					
						
							|  |  |  |         loop.run_forever()
 | 
					
						
							|  |  |  |     finally:
 | 
					
						
							|  |  |  |         loop.close()
 |