Home | History | Annotate | Download | only in library
      1 .. currentmodule:: asyncio
      2 
      3 
      4 ==========
      5 Event Loop
      6 ==========
      7 
      8 
      9 .. rubric:: Preface
     10 
     11 The event loop is the core of every asyncio application.
     12 Event loops run asynchronous tasks and callbacks, perform network
     13 IO operations, and run subprocesses.
     14 
     15 Application developers should typically use the high-level asyncio functions,
     16 such as :func:`asyncio.run`, and should rarely need to reference the loop
     17 object or call its methods.  This section is intended mostly for authors
     18 of lower-level code, libraries, and frameworks, who need finer control over
     19 the event loop behavior.
     20 
     21 .. rubric:: Obtaining the Event Loop
     22 
     23 The following low-level functions can be used to get, set, or create
     24 an event loop:
     25 
     26 .. function:: get_running_loop()
     27 
     28    Return the running event loop in the current OS thread.
     29 
     30    If there is no running event loop a :exc:`RuntimeError` is raised.
     31    This function can only be called from a coroutine or a callback.
     32 
     33    .. versionadded:: 3.7
     34 
     35 .. function:: get_event_loop()
     36 
     37    Get the current event loop.  If there is no current event loop set
     38    in the current OS thread and :func:`set_event_loop` has not yet
     39    been called, asyncio will create a new event loop and set it as the
     40    current one.
     41 
     42    Because this function has rather complex behavior (especially
     43    when custom event loop policies are in use), using the
     44    :func:`get_running_loop` function is preferred to :func:`get_event_loop`
     45    in coroutines and callbacks.
     46 
     47    Consider also using the :func:`asyncio.run` function instead of using
     48    lower level functions to manually create and close an event loop.
     49 
     50 .. function:: set_event_loop(loop)
     51 
     52    Set *loop* as a current event loop for the current OS thread.
     53 
     54 .. function:: new_event_loop()
     55 
     56    Create a new event loop object.
     57 
     58 Note that the behaviour of :func:`get_event_loop`, :func:`set_event_loop`,
     59 and :func:`new_event_loop` functions can be altered by
     60 :ref:`setting a custom event loop policy <asyncio-policies>`.
     61 
     62 
     63 .. rubric:: Contents
     64 
     65 This documentation page contains the following sections:
     66 
     67 * The `Event Loop Methods`_ section is the reference documentation of
     68   the event loop APIs;
     69 
     70 * The `Callback Handles`_ section documents the :class:`Handle` and
     71   :class:`TimerHandle` instances which are returned from scheduling
     72   methods such as :meth:`loop.call_soon` and :meth:`loop.call_later`;
     73 
     74 * The `Server Objects`_ section documents types returned from
     75   event loop methods like :meth:`loop.create_server`;
     76 
     77 * The `Event Loop Implementations`_ section documents the
     78   :class:`SelectorEventLoop` and :class:`ProactorEventLoop` classes;
     79 
     80 * The `Examples`_ section showcases how to work with some event
     81   loop APIs.
     82 
     83 
     84 .. _asyncio-event-loop:
     85 
     86 Event Loop Methods
     87 ==================
     88 
     89 Event loops have **low-level** APIs for the following:
     90 
     91 .. contents::
     92    :depth: 1
     93    :local:
     94 
     95 
     96 Running and stopping the loop
     97 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     98 
     99 .. method:: loop.run_until_complete(future)
    100 
    101    Run until the *future* (an instance of :class:`Future`) has
    102    completed.
    103 
    104    If the argument is a :ref:`coroutine object <coroutine>` it
    105    is implicitly scheduled to run as a :class:`asyncio.Task`.
    106 
    107    Return the Future's result or raise its exception.
    108 
    109 .. method:: loop.run_forever()
    110 
    111    Run the event loop until :meth:`stop` is called.
    112 
    113    If :meth:`stop` is called before :meth:`run_forever()` is called,
    114    the loop will poll the I/O selector once with a timeout of zero,
    115    run all callbacks scheduled in response to I/O events (and
    116    those that were already scheduled), and then exit.
    117 
    118    If :meth:`stop` is called while :meth:`run_forever` is running,
    119    the loop will run the current batch of callbacks and then exit.
    120    Note that new callbacks scheduled by callbacks will not run in this
    121    case; instead, they will run the next time :meth:`run_forever` or
    122    :meth:`run_until_complete` is called.
    123 
    124 .. method:: loop.stop()
    125 
    126    Stop the event loop.
    127 
    128 .. method:: loop.is_running()
    129 
    130    Return ``True`` if the event loop is currently running.
    131 
    132 .. method:: loop.is_closed()
    133 
    134    Return ``True`` if the event loop was closed.
    135 
    136 .. method:: loop.close()
    137 
    138    Close the event loop.
    139 
    140    The loop must not be running when this function is called.
    141    Any pending callbacks will be discarded.
    142 
    143    This method clears all queues and shuts down the executor, but does
    144    not wait for the executor to finish.
    145 
    146    This method is idempotent and irreversible.  No other methods
    147    should be called after the event loop is closed.
    148 
    149 .. coroutinemethod:: loop.shutdown_asyncgens()
    150 
    151    Schedule all currently open :term:`asynchronous generator` objects to
    152    close with an :meth:`~agen.aclose()` call.  After calling this method,
    153    the event loop will issue a warning if a new asynchronous generator
    154    is iterated. This should be used to reliably finalize all scheduled
    155    asynchronous generators.
    156 
    157    Note that there is no need to call this function when
    158    :func:`asyncio.run` is used.
    159 
    160    Example::
    161 
    162     try:
    163         loop.run_forever()
    164     finally:
    165         loop.run_until_complete(loop.shutdown_asyncgens())
    166         loop.close()
    167 
    168    .. versionadded:: 3.6
    169 
    170 
    171 Scheduling callbacks
    172 ^^^^^^^^^^^^^^^^^^^^
    173 
    174 .. method:: loop.call_soon(callback, *args, context=None)
    175 
    176    Schedule a *callback* to be called with *args* arguments at
    177    the next iteration of the event loop.
    178 
    179    Callbacks are called in the order in which they are registered.
    180    Each callback will be called exactly once.
    181 
    182    An optional keyword-only *context* argument allows specifying a
    183    custom :class:`contextvars.Context` for the *callback* to run in.
    184    The current context is used when no *context* is provided.
    185 
    186    An instance of :class:`asyncio.Handle` is returned, which can be
    187    used later to cancel the callback.
    188 
    189    This method is not thread-safe.
    190 
    191 .. method:: loop.call_soon_threadsafe(callback, *args, context=None)
    192 
    193    A thread-safe variant of :meth:`call_soon`.  Must be used to
    194    schedule callbacks *from another thread*.
    195 
    196    See the :ref:`concurrency and multithreading <asyncio-multithreading>`
    197    section of the documentation.
    198 
    199 .. versionchanged:: 3.7
    200    The *context* keyword-only parameter was added. See :pep:`567`
    201    for more details.
    202 
    203 .. _asyncio-pass-keywords:
    204 
    205 .. note::
    206 
    207    Most :mod:`asyncio` scheduling functions don't allow passing
    208    keyword arguments.  To do that, use :func:`functools.partial`::
    209 
    210       # will schedule "print("Hello", flush=True)"
    211       loop.call_soon(
    212           functools.partial(print, "Hello", flush=True))
    213 
    214    Using partial objects is usually more convenient than using lambdas,
    215    as asyncio can render partial objects better in debug and error
    216    messages.
    217 
    218 
    219 .. _asyncio-delayed-calls:
    220 
    221 Scheduling delayed callbacks
    222 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    223 
    224 Event loop provides mechanisms to schedule callback functions
    225 to be called at some point in the future.  Event loop uses monotonic
    226 clocks to track time.
    227 
    228 
    229 .. method:: loop.call_later(delay, callback, *args, context=None)
    230 
    231    Schedule *callback* to be called after the given *delay*
    232    number of seconds (can be either an int or a float).
    233 
    234    An instance of :class:`asyncio.TimerHandle` is returned which can
    235    be used to cancel the callback.
    236 
    237    *callback* will be called exactly once.  If two callbacks are
    238    scheduled for exactly the same time, the order in which they
    239    are called is undefined.
    240 
    241    The optional positional *args* will be passed to the callback when
    242    it is called. If you want the callback to be called with keyword
    243    arguments use :func:`functools.partial`.
    244 
    245    An optional keyword-only *context* argument allows specifying a
    246    custom :class:`contextvars.Context` for the *callback* to run in.
    247    The current context is used when no *context* is provided.
    248 
    249    .. versionchanged:: 3.7
    250       The *context* keyword-only parameter was added. See :pep:`567`
    251       for more details.
    252 
    253    .. versionchanged:: 3.7.1
    254       In Python 3.7.0 and earlier with the default event loop implementation,
    255       the *delay* could not exceed one day.
    256       This has been fixed in Python 3.7.1.
    257 
    258 .. method:: loop.call_at(when, callback, *args, context=None)
    259 
    260    Schedule *callback* to be called at the given absolute timestamp
    261    *when* (an int or a float), using the same time reference as
    262    :meth:`loop.time`.
    263 
    264    This method's behavior is the same as :meth:`call_later`.
    265 
    266    An instance of :class:`asyncio.TimerHandle` is returned which can
    267    be used to cancel the callback.
    268 
    269    .. versionchanged:: 3.7
    270       The *context* keyword-only parameter was added. See :pep:`567`
    271       for more details.
    272 
    273    .. versionchanged:: 3.7.1
    274       In Python 3.7.0 and earlier with the default event loop implementation,
    275       the difference between *when* and the current time could not exceed
    276       one day.  This has been fixed in Python 3.7.1.
    277 
    278 .. method:: loop.time()
    279 
    280    Return the current time, as a :class:`float` value, according to
    281    the event loop's internal monotonic clock.
    282 
    283 .. note::
    284 
    285    Timeouts (relative *delay* or absolute *when*) should not
    286    exceed one day.
    287 
    288 .. seealso::
    289 
    290    The :func:`asyncio.sleep` function.
    291 
    292 
    293 Creating Futures and Tasks
    294 ^^^^^^^^^^^^^^^^^^^^^^^^^^
    295 
    296 .. method:: loop.create_future()
    297 
    298    Create an :class:`asyncio.Future` object attached to the event loop.
    299 
    300    This is the preferred way to create Futures in asyncio. This lets
    301    third-party event loops provide alternative implementations of
    302    the Future object (with better performance or instrumentation).
    303 
    304    .. versionadded:: 3.5.2
    305 
    306 .. method:: loop.create_task(coro)
    307 
    308    Schedule the execution of a :ref:`coroutine`.
    309    Return a :class:`Task` object.
    310 
    311    Third-party event loops can use their own subclass of :class:`Task`
    312    for interoperability. In this case, the result type is a subclass
    313    of :class:`Task`.
    314 
    315 .. method:: loop.set_task_factory(factory)
    316 
    317    Set a task factory that will be used by
    318    :meth:`loop.create_task`.
    319 
    320    If *factory* is ``None`` the default task factory will be set.
    321    Otherwise, *factory* must be a *callable* with the signature matching
    322    ``(loop, coro)``, where *loop* is a reference to the active
    323    event loop, and *coro* is a coroutine object.  The callable
    324    must return a :class:`asyncio.Future`-compatible object.
    325 
    326 .. method:: loop.get_task_factory()
    327 
    328    Return a task factory or ``None`` if the default one is in use.
    329 
    330 
    331 Opening network connections
    332 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
    333 
    334 .. coroutinemethod:: loop.create_connection(protocol_factory, \
    335                           host=None, port=None, \*, ssl=None, \
    336                           family=0, proto=0, flags=0, sock=None, \
    337                           local_addr=None, server_hostname=None, \
    338                           ssl_handshake_timeout=None)
    339 
    340    Open a streaming transport connection to a given
    341    address specified by *host* and *port*.
    342 
    343    The socket family can be either :py:data:`~socket.AF_INET` or
    344    :py:data:`~socket.AF_INET6` depending on *host* (or the *family*
    345    argument, if provided).
    346 
    347    The socket type will be :py:data:`~socket.SOCK_STREAM`.
    348 
    349    *protocol_factory* must be a callable returning an
    350    :ref:`asyncio protocol <asyncio-protocol>` implementation.
    351 
    352    This method will try to establish the connection in the background.
    353    When successful, it returns a ``(transport, protocol)`` pair.
    354 
    355    The chronological synopsis of the underlying operation is as follows:
    356 
    357    #. The connection is established and a :ref:`transport <asyncio-transport>`
    358       is created for it.
    359 
    360    #. *protocol_factory* is called without arguments and is expected to
    361       return a :ref:`protocol <asyncio-protocol>` instance.
    362 
    363    #. The protocol instance is coupled with the transport by calling its
    364       :meth:`~BaseProtocol.connection_made` method.
    365 
    366    #. A ``(transport, protocol)`` tuple is returned on success.
    367 
    368    The created transport is an implementation-dependent bidirectional
    369    stream.
    370 
    371    Other arguments:
    372 
    373    * *ssl*: if given and not false, a SSL/TLS transport is created
    374      (by default a plain TCP transport is created).  If *ssl* is
    375      a :class:`ssl.SSLContext` object, this context is used to create
    376      the transport; if *ssl* is :const:`True`, a default context returned
    377      from :func:`ssl.create_default_context` is used.
    378 
    379      .. seealso:: :ref:`SSL/TLS security considerations <ssl-security>`
    380 
    381    * *server_hostname* sets or overrides the hostname that the target
    382      server's certificate will be matched against.  Should only be passed
    383      if *ssl* is not ``None``.  By default the value of the *host* argument
    384      is used.  If *host* is empty, there is no default and you must pass a
    385      value for *server_hostname*.  If *server_hostname* is an empty
    386      string, hostname matching is disabled (which is a serious security
    387      risk, allowing for potential man-in-the-middle attacks).
    388 
    389    * *family*, *proto*, *flags* are the optional address family, protocol
    390      and flags to be passed through to getaddrinfo() for *host* resolution.
    391      If given, these should all be integers from the corresponding
    392      :mod:`socket` module constants.
    393 
    394    * *sock*, if given, should be an existing, already connected
    395      :class:`socket.socket` object to be used by the transport.
    396      If *sock* is given, none of *host*, *port*, *family*, *proto*, *flags*
    397      and *local_addr* should be specified.
    398 
    399    * *local_addr*, if given, is a ``(local_host, local_port)`` tuple used
    400      to bind the socket to locally.  The *local_host* and *local_port*
    401      are looked up using ``getaddrinfo()``, similarly to *host* and *port*.
    402 
    403    * *ssl_handshake_timeout* is (for a TLS connection) the time in seconds
    404      to wait for the TLS handshake to complete before aborting the connection.
    405      ``60.0`` seconds if ``None`` (default).
    406 
    407    .. versionadded:: 3.7
    408 
    409       The *ssl_handshake_timeout* parameter.
    410 
    411    .. versionchanged:: 3.6
    412 
    413       The socket option :py:data:`~socket.TCP_NODELAY` is set by default
    414       for all TCP connections.
    415 
    416    .. versionchanged:: 3.5
    417 
    418       Added support for SSL/TLS in :class:`ProactorEventLoop`.
    419 
    420    .. seealso::
    421 
    422       The :func:`open_connection` function is a high-level alternative
    423       API.  It returns a pair of (:class:`StreamReader`, :class:`StreamWriter`)
    424       that can be used directly in async/await code.
    425 
    426 .. coroutinemethod:: loop.create_datagram_endpoint(protocol_factory, \
    427                         local_addr=None, remote_addr=None, \*, \
    428                         family=0, proto=0, flags=0, \
    429                         reuse_address=None, reuse_port=None, \
    430                         allow_broadcast=None, sock=None)
    431 
    432    Create a datagram connection.
    433 
    434    The socket family can be either :py:data:`~socket.AF_INET`,
    435    :py:data:`~socket.AF_INET6`, or :py:data:`~socket.AF_UNIX`,
    436    depending on *host* (or the *family* argument, if provided).
    437 
    438    The socket type will be :py:data:`~socket.SOCK_DGRAM`.
    439 
    440    *protocol_factory* must be a callable returning a
    441    :ref:`protocol <asyncio-protocol>` implementation.
    442 
    443    A tuple of ``(transport, protocol)`` is returned on success.
    444 
    445    Other arguments:
    446 
    447    * *local_addr*, if given, is a ``(local_host, local_port)`` tuple used
    448      to bind the socket to locally.  The *local_host* and *local_port*
    449      are looked up using :meth:`getaddrinfo`.
    450 
    451    * *remote_addr*, if given, is a ``(remote_host, remote_port)`` tuple used
    452      to connect the socket to a remote address.  The *remote_host* and
    453      *remote_port* are looked up using :meth:`getaddrinfo`.
    454 
    455    * *family*, *proto*, *flags* are the optional address family, protocol
    456      and flags to be passed through to :meth:`getaddrinfo` for *host*
    457      resolution. If given, these should all be integers from the
    458      corresponding :mod:`socket` module constants.
    459 
    460    * *reuse_address* tells the kernel to reuse a local socket in
    461      ``TIME_WAIT`` state, without waiting for its natural timeout to
    462      expire. If not specified will automatically be set to ``True`` on
    463      Unix.
    464 
    465    * *reuse_port* tells the kernel to allow this endpoint to be bound to the
    466      same port as other existing endpoints are bound to, so long as they all
    467      set this flag when being created. This option is not supported on Windows
    468      and some Unixes. If the :py:data:`~socket.SO_REUSEPORT` constant is not
    469      defined then this capability is unsupported.
    470 
    471    * *allow_broadcast* tells the kernel to allow this endpoint to send
    472      messages to the broadcast address.
    473 
    474    * *sock* can optionally be specified in order to use a preexisting,
    475      already connected, :class:`socket.socket` object to be used by the
    476      transport. If specified, *local_addr* and *remote_addr* should be omitted
    477      (must be :const:`None`).
    478 
    479    On Windows, with :class:`ProactorEventLoop`, this method is not supported.
    480 
    481    See :ref:`UDP echo client protocol <asyncio-udp-echo-client-protocol>` and
    482    :ref:`UDP echo server protocol <asyncio-udp-echo-server-protocol>` examples.
    483 
    484    .. versionchanged:: 3.4.4
    485       The *family*, *proto*, *flags*, *reuse_address*, *reuse_port,
    486       *allow_broadcast*, and *sock* parameters were added.
    487 
    488 .. coroutinemethod:: loop.create_unix_connection(protocol_factory, \
    489                         path=None, \*, ssl=None, sock=None, \
    490                         server_hostname=None, ssl_handshake_timeout=None)
    491 
    492    Create a Unix connection.
    493 
    494    The socket family will be :py:data:`~socket.AF_UNIX`; socket
    495    type will be :py:data:`~socket.SOCK_STREAM`.
    496 
    497    A tuple of ``(transport, protocol)`` is returned on success.
    498 
    499    *path* is the name of a Unix domain socket and is required,
    500    unless a *sock* parameter is specified.  Abstract Unix sockets,
    501    :class:`str`, :class:`bytes`, and :class:`~pathlib.Path` paths are
    502    supported.
    503 
    504    See the documentation of the :meth:`loop.create_connection` method
    505    for information about arguments to this method.
    506 
    507    .. availability:: Unix.
    508 
    509    .. versionadded:: 3.7
    510 
    511       The *ssl_handshake_timeout* parameter.
    512 
    513    .. versionchanged:: 3.7
    514 
    515       The *path* parameter can now be a :term:`path-like object`.
    516 
    517 
    518 Creating network servers
    519 ^^^^^^^^^^^^^^^^^^^^^^^^
    520 
    521 .. coroutinemethod:: loop.create_server(protocol_factory, \
    522                         host=None, port=None, \*, \
    523                         family=socket.AF_UNSPEC, \
    524                         flags=socket.AI_PASSIVE, \
    525                         sock=None, backlog=100, ssl=None, \
    526                         reuse_address=None, reuse_port=None, \
    527                         ssl_handshake_timeout=None, start_serving=True)
    528 
    529    Create a TCP server (socket type :data:`~socket.SOCK_STREAM`) listening
    530    on *port* of the *host* address.
    531 
    532    Returns a :class:`Server` object.
    533 
    534    Arguments:
    535 
    536    * *protocol_factory* must be a callable returning a
    537      :ref:`protocol <asyncio-protocol>` implementation.
    538 
    539    * The *host* parameter can be set to several types which determine where
    540      the server would be listening:
    541 
    542      - If *host* is a string, the TCP server is bound to a single network
    543        interface specified by *host*.
    544 
    545      - If *host* is a sequence of strings, the TCP server is bound to all
    546        network interfaces specified by the sequence.
    547 
    548      - If *host* is an empty string or ``None``, all interfaces are
    549        assumed and a list of multiple sockets will be returned (most likely
    550        one for IPv4 and another one for IPv6).
    551 
    552    * *family* can be set to either :data:`socket.AF_INET` or
    553      :data:`~socket.AF_INET6` to force the socket to use IPv4 or IPv6.
    554      If not set, the *family* will be determined from host name
    555      (defaults to :data:`~socket.AF_UNSPEC`).
    556 
    557    * *flags* is a bitmask for :meth:`getaddrinfo`.
    558 
    559    * *sock* can optionally be specified in order to use a preexisting
    560      socket object. If specified, *host* and *port* must not be specified.
    561 
    562    * *backlog* is the maximum number of queued connections passed to
    563      :meth:`~socket.socket.listen` (defaults to 100).
    564 
    565    * *ssl* can be set to an :class:`~ssl.SSLContext` instance to enable
    566      TLS over the accepted connections.
    567 
    568    * *reuse_address* tells the kernel to reuse a local socket in
    569      ``TIME_WAIT`` state, without waiting for its natural timeout to
    570      expire. If not specified will automatically be set to ``True`` on
    571      Unix.
    572 
    573    * *reuse_port* tells the kernel to allow this endpoint to be bound to the
    574      same port as other existing endpoints are bound to, so long as they all
    575      set this flag when being created. This option is not supported on
    576      Windows.
    577 
    578    * *ssl_handshake_timeout* is (for a TLS server) the time in seconds to wait
    579      for the TLS handshake to complete before aborting the connection.
    580      ``60.0`` seconds if ``None`` (default).
    581 
    582    * *start_serving* set to ``True`` (the default) causes the created server
    583      to start accepting connections immediately.  When set to ``False``,
    584      the user should await on :meth:`Server.start_serving` or
    585      :meth:`Server.serve_forever` to make the server to start accepting
    586      connections.
    587 
    588    .. versionadded:: 3.7
    589 
    590       Added *ssl_handshake_timeout* and *start_serving* parameters.
    591 
    592    .. versionchanged:: 3.6
    593 
    594       The socket option :py:data:`~socket.TCP_NODELAY` is set by default
    595       for all TCP connections.
    596 
    597    .. versionchanged:: 3.5
    598 
    599       Added support for SSL/TLS in :class:`ProactorEventLoop`.
    600 
    601    .. versionchanged:: 3.5.1
    602 
    603       The *host* parameter can be a sequence of strings.
    604 
    605    .. seealso::
    606 
    607       The :func:`start_server` function is a higher-level alternative API
    608       that returns a pair of :class:`StreamReader` and :class:`StreamWriter`
    609       that can be used in an async/await code.
    610 
    611 
    612 .. coroutinemethod:: loop.create_unix_server(protocol_factory, path=None, \
    613                           \*, sock=None, backlog=100, ssl=None, \
    614                           ssl_handshake_timeout=None, start_serving=True)
    615 
    616    Similar to :meth:`loop.create_server` but works with the
    617    :py:data:`~socket.AF_UNIX` socket family.
    618 
    619    *path* is the name of a Unix domain socket, and is required,
    620    unless a *sock* argument is provided.  Abstract Unix sockets,
    621    :class:`str`, :class:`bytes`, and :class:`~pathlib.Path` paths
    622    are supported.
    623 
    624    See the documentation of the :meth:`loop.create_server` method
    625    for information about arguments to this method.
    626 
    627    .. availability:: Unix.
    628 
    629    .. versionadded:: 3.7
    630 
    631       The *ssl_handshake_timeout* and *start_serving* parameters.
    632 
    633    .. versionchanged:: 3.7
    634 
    635       The *path* parameter can now be a :class:`~pathlib.Path` object.
    636 
    637 .. coroutinemethod:: loop.connect_accepted_socket(protocol_factory, \
    638                         sock, \*, ssl=None, ssl_handshake_timeout=None)
    639 
    640    Wrap an already accepted connection into a transport/protocol pair.
    641 
    642    This method can be used by servers that accept connections outside
    643    of asyncio but that use asyncio to handle them.
    644 
    645    Parameters:
    646 
    647    * *protocol_factory* must be a callable returning a
    648      :ref:`protocol <asyncio-protocol>` implementation.
    649 
    650    * *sock* is a preexisting socket object returned from
    651      :meth:`socket.accept <socket.socket.accept>`.
    652 
    653    * *ssl* can be set to an :class:`~ssl.SSLContext` to enable SSL over
    654      the accepted connections.
    655 
    656    * *ssl_handshake_timeout* is (for an SSL connection) the time in seconds to
    657      wait for the SSL handshake to complete before aborting the connection.
    658      ``60.0`` seconds if ``None`` (default).
    659 
    660    Returns a ``(transport, protocol)`` pair.
    661 
    662    .. versionadded:: 3.7
    663 
    664       The *ssl_handshake_timeout* parameter.
    665 
    666    .. versionadded:: 3.5.3
    667 
    668 
    669 Transferring files
    670 ^^^^^^^^^^^^^^^^^^
    671 
    672 .. coroutinemethod:: loop.sendfile(transport, file, \
    673                                    offset=0, count=None, *, fallback=True)
    674 
    675    Send a *file* over a *transport*.  Return the total number of bytes
    676    sent.
    677 
    678    The method uses high-performance :meth:`os.sendfile` if available.
    679 
    680    *file* must be a regular file object opened in binary mode.
    681 
    682    *offset* tells from where to start reading the file. If specified,
    683    *count* is the total number of bytes to transmit as opposed to
    684    sending the file until EOF is reached. File position is always updated,
    685    even when this method raises an error, and
    686    :meth:`file.tell() <io.IOBase.tell>` can be used to obtain the actual
    687    number of bytes sent.
    688 
    689    *fallback* set to ``True`` makes asyncio to manually read and send
    690    the file when the platform does not support the sendfile system call
    691    (e.g. Windows or SSL socket on Unix).
    692 
    693    Raise :exc:`SendfileNotAvailableError` if the system does not support
    694    the *sendfile* syscall and *fallback* is ``False``.
    695 
    696    .. versionadded:: 3.7
    697 
    698 
    699 TLS Upgrade
    700 ^^^^^^^^^^^
    701 
    702 .. coroutinemethod:: loop.start_tls(transport, protocol, \
    703                         sslcontext, \*, server_side=False, \
    704                         server_hostname=None, ssl_handshake_timeout=None)
    705 
    706    Upgrade an existing transport-based connection to TLS.
    707 
    708    Return a new transport instance, that the *protocol* must start using
    709    immediately after the *await*.  The *transport* instance passed to
    710    the *start_tls* method should never be used again.
    711 
    712    Parameters:
    713 
    714    * *transport* and *protocol* instances that methods like
    715      :meth:`~loop.create_server` and
    716      :meth:`~loop.create_connection` return.
    717 
    718    * *sslcontext*: a configured instance of :class:`~ssl.SSLContext`.
    719 
    720    * *server_side* pass ``True`` when a server-side connection is being
    721      upgraded (like the one created by :meth:`~loop.create_server`).
    722 
    723    * *server_hostname*: sets or overrides the host name that the target
    724      server's certificate will be matched against.
    725 
    726    * *ssl_handshake_timeout* is (for a TLS connection) the time in seconds to
    727      wait for the TLS handshake to complete before aborting the connection.
    728      ``60.0`` seconds if ``None`` (default).
    729 
    730    .. versionadded:: 3.7
    731 
    732 
    733 Watching file descriptors
    734 ^^^^^^^^^^^^^^^^^^^^^^^^^
    735 
    736 .. method:: loop.add_reader(fd, callback, \*args)
    737 
    738    Start monitoring the *fd* file descriptor for read availability and
    739    invoke *callback* with the specified arguments once *fd* is available for
    740    reading.
    741 
    742 .. method:: loop.remove_reader(fd)
    743 
    744    Stop monitoring the *fd* file descriptor for read availability.
    745 
    746 .. method:: loop.add_writer(fd, callback, \*args)
    747 
    748    Start monitoring the *fd* file descriptor for write availability and
    749    invoke *callback* with the specified arguments once *fd* is available for
    750    writing.
    751 
    752    Use :func:`functools.partial` :ref:`to pass keyword arguments
    753    <asyncio-pass-keywords>` to *callback*.
    754 
    755 .. method:: loop.remove_writer(fd)
    756 
    757    Stop monitoring the *fd* file descriptor for write availability.
    758 
    759 See also :ref:`Platform Support <asyncio-platform-support>` section
    760 for some limitations of these methods.
    761 
    762 
    763 Working with socket objects directly
    764 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    765 
    766 In general, protocol implementations that use transport-based APIs
    767 such as :meth:`loop.create_connection` and :meth:`loop.create_server`
    768 are faster than implementations that work with sockets directly.
    769 However, there are some use cases when performance is not critical, and
    770 working with :class:`~socket.socket` objects directly is more
    771 convenient.
    772 
    773 .. coroutinemethod:: loop.sock_recv(sock, nbytes)
    774 
    775    Receive up to *nbytes* from *sock*.  Asynchronous version of
    776    :meth:`socket.recv() <socket.socket.recv>`.
    777 
    778    Return the received data as a bytes object.
    779 
    780    *sock* must be a non-blocking socket.
    781 
    782    .. versionchanged:: 3.7
    783       Even though this method was always documented as a coroutine
    784       method, releases before Python 3.7 returned a :class:`Future`.
    785       Since Python 3.7 this is an ``async def`` method.
    786 
    787 .. coroutinemethod:: loop.sock_recv_into(sock, buf)
    788 
    789    Receive data from *sock* into the *buf* buffer.  Modeled after the blocking
    790    :meth:`socket.recv_into() <socket.socket.recv_into>` method.
    791 
    792    Return the number of bytes written to the buffer.
    793 
    794    *sock* must be a non-blocking socket.
    795 
    796    .. versionadded:: 3.7
    797 
    798 .. coroutinemethod:: loop.sock_sendall(sock, data)
    799 
    800    Send *data* to the *sock* socket. Asynchronous version of
    801    :meth:`socket.sendall() <socket.socket.sendall>`.
    802 
    803    This method continues to send to the socket until either all data
    804    in *data* has been sent or an error occurs.  ``None`` is returned
    805    on success.  On error, an exception is raised. Additionally, there is no way
    806    to determine how much data, if any, was successfully processed by the
    807    receiving end of the connection.
    808 
    809    *sock* must be a non-blocking socket.
    810 
    811    .. versionchanged:: 3.7
    812       Even though the method was always documented as a coroutine
    813       method, before Python 3.7 it returned an :class:`Future`.
    814       Since Python 3.7, this is an ``async def`` method.
    815 
    816 .. coroutinemethod:: loop.sock_connect(sock, address)
    817 
    818    Connect *sock* to a remote socket at *address*.
    819 
    820    Asynchronous version of :meth:`socket.connect() <socket.socket.connect>`.
    821 
    822    *sock* must be a non-blocking socket.
    823 
    824    .. versionchanged:: 3.5.2
    825       ``address`` no longer needs to be resolved.  ``sock_connect``
    826       will try to check if the *address* is already resolved by calling
    827       :func:`socket.inet_pton`.  If not,
    828       :meth:`loop.getaddrinfo` will be used to resolve the
    829       *address*.
    830 
    831    .. seealso::
    832 
    833       :meth:`loop.create_connection`
    834       and  :func:`asyncio.open_connection() <open_connection>`.
    835 
    836 
    837 .. coroutinemethod:: loop.sock_accept(sock)
    838 
    839    Accept a connection.  Modeled after the blocking
    840    :meth:`socket.accept() <socket.socket.accept>` method.
    841 
    842    The socket must be bound to an address and listening
    843    for connections. The return value is a pair ``(conn, address)`` where *conn*
    844    is a *new* socket object usable to send and receive data on the connection,
    845    and *address* is the address bound to the socket on the other end of the
    846    connection.
    847 
    848    *sock* must be a non-blocking socket.
    849 
    850    .. versionchanged:: 3.7
    851       Even though the method was always documented as a coroutine
    852       method, before Python 3.7 it returned a :class:`Future`.
    853       Since Python 3.7, this is an ``async def`` method.
    854 
    855    .. seealso::
    856 
    857       :meth:`loop.create_server` and :func:`start_server`.
    858 
    859 .. coroutinemethod:: loop.sock_sendfile(sock, file, offset=0, count=None, \
    860                                         \*, fallback=True)
    861 
    862    Send a file using high-performance :mod:`os.sendfile` if possible.
    863    Return the total number of bytes sent.
    864 
    865    Asynchronous version of :meth:`socket.sendfile() <socket.socket.sendfile>`.
    866 
    867    *sock* must be a non-blocking :const:`socket.SOCK_STREAM`
    868    :class:`~socket.socket`.
    869 
    870    *file* must be a regular file object open in binary mode.
    871 
    872    *offset* tells from where to start reading the file. If specified,
    873    *count* is the total number of bytes to transmit as opposed to
    874    sending the file until EOF is reached. File position is always updated,
    875    even when this method raises an error, and
    876    :meth:`file.tell() <io.IOBase.tell>` can be used to obtain the actual
    877    number of bytes sent.
    878 
    879    *fallback*, when set to ``True``, makes asyncio manually read and send
    880    the file when the platform does not support the sendfile syscall
    881    (e.g. Windows or SSL socket on Unix).
    882 
    883    Raise :exc:`SendfileNotAvailableError` if the system does not support
    884    *sendfile* syscall and *fallback* is ``False``.
    885 
    886    *sock* must be a non-blocking socket.
    887 
    888    .. versionadded:: 3.7
    889 
    890 
    891 DNS
    892 ^^^
    893 
    894 .. coroutinemethod:: loop.getaddrinfo(host, port, \*, family=0, \
    895                         type=0, proto=0, flags=0)
    896 
    897    Asynchronous version of :meth:`socket.getaddrinfo`.
    898 
    899 .. coroutinemethod:: loop.getnameinfo(sockaddr, flags=0)
    900 
    901    Asynchronous version of :meth:`socket.getnameinfo`.
    902 
    903 .. versionchanged:: 3.7
    904    Both *getaddrinfo* and *getnameinfo* methods were always documented
    905    to return a coroutine, but prior to Python 3.7 they were, in fact,
    906    returning :class:`asyncio.Future` objects.  Starting with Python 3.7
    907    both methods are coroutines.
    908 
    909 
    910 Working with pipes
    911 ^^^^^^^^^^^^^^^^^^
    912 
    913 .. coroutinemethod:: loop.connect_read_pipe(protocol_factory, pipe)
    914 
    915    Register the read end of *pipe* in the event loop.
    916 
    917    *protocol_factory* must be a callable returning an
    918    :ref:`asyncio protocol <asyncio-protocol>` implementation.
    919 
    920    *pipe* is a :term:`file-like object <file object>`.
    921 
    922    Return pair ``(transport, protocol)``, where *transport* supports
    923    the :class:`ReadTransport` interface and *protocol* is an object
    924    instantiated by the *protocol_factory*.
    925 
    926    With :class:`SelectorEventLoop` event loop, the *pipe* is set to
    927    non-blocking mode.
    928 
    929 .. coroutinemethod:: loop.connect_write_pipe(protocol_factory, pipe)
    930 
    931    Register the write end of *pipe* in the event loop.
    932 
    933    *protocol_factory* must be a callable returning an
    934    :ref:`asyncio protocol <asyncio-protocol>` implementation.
    935 
    936    *pipe* is :term:`file-like object <file object>`.
    937 
    938    Return pair ``(transport, protocol)``, where *transport* supports
    939    :class:`WriteTransport` interface and *protocol* is an object
    940    instantiated by the *protocol_factory*.
    941 
    942    With :class:`SelectorEventLoop` event loop, the *pipe* is set to
    943    non-blocking mode.
    944 
    945 .. note::
    946 
    947    :class:`SelectorEventLoop` does not support the above methods on
    948    Windows.  Use :class:`ProactorEventLoop` instead for Windows.
    949 
    950 .. seealso::
    951 
    952    The :meth:`loop.subprocess_exec` and
    953    :meth:`loop.subprocess_shell` methods.
    954 
    955 
    956 Unix signals
    957 ^^^^^^^^^^^^
    958 
    959 .. method:: loop.add_signal_handler(signum, callback, \*args)
    960 
    961    Set *callback* as the handler for the *signum* signal.
    962 
    963    The callback will be invoked by *loop*, along with other queued callbacks
    964    and runnable coroutines of that event loop. Unlike signal handlers
    965    registered using :func:`signal.signal`, a callback registered with this
    966    function is allowed to interact with the event loop.
    967 
    968    Raise :exc:`ValueError` if the signal number is invalid or uncatchable.
    969    Raise :exc:`RuntimeError` if there is a problem setting up the handler.
    970 
    971    Use :func:`functools.partial` :ref:`to pass keyword arguments
    972    <asyncio-pass-keywords>` to *callback*.
    973 
    974    Like :func:`signal.signal`, this function must be invoked in the main
    975    thread.
    976 
    977 .. method:: loop.remove_signal_handler(sig)
    978 
    979    Remove the handler for the *sig* signal.
    980 
    981    Return ``True`` if the signal handler was removed, or ``False`` if
    982    no handler was set for the given signal.
    983 
    984    .. availability:: Unix.
    985 
    986 .. seealso::
    987 
    988    The :mod:`signal` module.
    989 
    990 
    991 Executing code in thread or process pools
    992 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    993 
    994 .. awaitablemethod:: loop.run_in_executor(executor, func, \*args)
    995 
    996    Arrange for *func* to be called in the specified executor.
    997 
    998    The *executor* argument should be an :class:`concurrent.futures.Executor`
    999    instance. The default executor is used if *executor* is ``None``.
   1000 
   1001    Example::
   1002 
   1003       import asyncio
   1004       import concurrent.futures
   1005 
   1006       def blocking_io():
   1007           # File operations (such as logging) can block the
   1008           # event loop: run them in a thread pool.
   1009           with open('/dev/urandom', 'rb') as f:
   1010               return f.read(100)
   1011 
   1012       def cpu_bound():
   1013           # CPU-bound operations will block the event loop:
   1014           # in general it is preferable to run them in a
   1015           # process pool.
   1016           return sum(i * i for i in range(10 ** 7))
   1017 
   1018       async def main():
   1019           loop = asyncio.get_running_loop()
   1020 
   1021           ## Options:
   1022 
   1023           # 1. Run in the default loop's executor:
   1024           result = await loop.run_in_executor(
   1025               None, blocking_io)
   1026           print('default thread pool', result)
   1027 
   1028           # 2. Run in a custom thread pool:
   1029           with concurrent.futures.ThreadPoolExecutor() as pool:
   1030               result = await loop.run_in_executor(
   1031                   pool, blocking_io)
   1032               print('custom thread pool', result)
   1033 
   1034           # 3. Run in a custom process pool:
   1035           with concurrent.futures.ProcessPoolExecutor() as pool:
   1036               result = await loop.run_in_executor(
   1037                   pool, cpu_bound)
   1038               print('custom process pool', result)
   1039 
   1040       asyncio.run(main())
   1041 
   1042    This method returns a :class:`asyncio.Future` object.
   1043 
   1044    Use :func:`functools.partial` :ref:`to pass keyword arguments
   1045    <asyncio-pass-keywords>` to *func*.
   1046 
   1047    .. versionchanged:: 3.5.3
   1048       :meth:`loop.run_in_executor` no longer configures the
   1049       ``max_workers`` of the thread pool executor it creates, instead
   1050       leaving it up to the thread pool executor
   1051       (:class:`~concurrent.futures.ThreadPoolExecutor`) to set the
   1052       default.
   1053 
   1054 .. method:: loop.set_default_executor(executor)
   1055 
   1056    Set *executor* as the default executor used by :meth:`run_in_executor`.
   1057    *executor* should be an instance of
   1058    :class:`~concurrent.futures.ThreadPoolExecutor`.
   1059 
   1060    .. deprecated:: 3.7
   1061       Using an executor that is not an instance of
   1062       :class:`~concurrent.futures.ThreadPoolExecutor` is deprecated and
   1063       will trigger an error in Python 3.9.
   1064 
   1065    *executor* must be an instance of
   1066    :class:`concurrent.futures.ThreadPoolExecutor`.
   1067 
   1068 
   1069 Error Handling API
   1070 ^^^^^^^^^^^^^^^^^^
   1071 
   1072 Allows customizing how exceptions are handled in the event loop.
   1073 
   1074 .. method:: loop.set_exception_handler(handler)
   1075 
   1076    Set *handler* as the new event loop exception handler.
   1077 
   1078    If *handler* is ``None``, the default exception handler will
   1079    be set.  Otherwise, *handler* must be a callable with the signature
   1080    matching ``(loop, context)``, where ``loop``
   1081    is a reference to the active event loop, and ``context``
   1082    is a ``dict`` object containing the details of the exception
   1083    (see :meth:`call_exception_handler` documentation for details
   1084    about context).
   1085 
   1086 .. method:: loop.get_exception_handler()
   1087 
   1088    Return the current exception handler, or ``None`` if no custom
   1089    exception handler was set.
   1090 
   1091    .. versionadded:: 3.5.2
   1092 
   1093 .. method:: loop.default_exception_handler(context)
   1094 
   1095    Default exception handler.
   1096 
   1097    This is called when an exception occurs and no exception
   1098    handler is set. This can be called by a custom exception
   1099    handler that wants to defer to the default handler behavior.
   1100 
   1101    *context* parameter has the same meaning as in
   1102    :meth:`call_exception_handler`.
   1103 
   1104 .. method:: loop.call_exception_handler(context)
   1105 
   1106    Call the current event loop exception handler.
   1107 
   1108    *context* is a ``dict`` object containing the following keys
   1109    (new keys may be introduced in future Python versions):
   1110 
   1111    * 'message': Error message;
   1112    * 'exception' (optional): Exception object;
   1113    * 'future' (optional): :class:`asyncio.Future` instance;
   1114    * 'handle' (optional): :class:`asyncio.Handle` instance;
   1115    * 'protocol' (optional): :ref:`Protocol <asyncio-protocol>` instance;
   1116    * 'transport' (optional): :ref:`Transport <asyncio-transport>` instance;
   1117    * 'socket' (optional): :class:`socket.socket` instance.
   1118 
   1119    .. note::
   1120 
   1121        This method should not be overloaded in subclassed
   1122        event loops.  For custom exception handling, use
   1123        the :meth:`set_exception_handler()` method.
   1124 
   1125 Enabling debug mode
   1126 ^^^^^^^^^^^^^^^^^^^
   1127 
   1128 .. method:: loop.get_debug()
   1129 
   1130    Get the debug mode (:class:`bool`) of the event loop.
   1131 
   1132    The default value is ``True`` if the environment variable
   1133    :envvar:`PYTHONASYNCIODEBUG` is set to a non-empty string, ``False``
   1134    otherwise.
   1135 
   1136 .. method:: loop.set_debug(enabled: bool)
   1137 
   1138    Set the debug mode of the event loop.
   1139 
   1140    .. versionchanged:: 3.7
   1141 
   1142       The new ``-X dev`` command line option can now also be used
   1143       to enable the debug mode.
   1144 
   1145 .. seealso::
   1146 
   1147    The :ref:`debug mode of asyncio <asyncio-debug-mode>`.
   1148 
   1149 
   1150 Running Subprocesses
   1151 ^^^^^^^^^^^^^^^^^^^^
   1152 
   1153 Methods described in this subsections are low-level.  In regular
   1154 async/await code consider using the high-level
   1155 :func:`asyncio.create_subprocess_shell` and
   1156 :func:`asyncio.create_subprocess_exec` convenience functions instead.
   1157 
   1158 .. note::
   1159 
   1160    The default asyncio event loop on **Windows** does not support
   1161    subprocesses. See :ref:`Subprocess Support on Windows
   1162    <asyncio-windows-subprocess>` for details.
   1163 
   1164 .. coroutinemethod:: loop.subprocess_exec(protocol_factory, \*args, \
   1165                       stdin=subprocess.PIPE, stdout=subprocess.PIPE, \
   1166                       stderr=subprocess.PIPE, \*\*kwargs)
   1167 
   1168    Create a subprocess from one or more string arguments specified by
   1169    *args*.
   1170 
   1171    *args* must be a list of strings represented by:
   1172 
   1173    * :class:`str`;
   1174    * or :class:`bytes`, encoded to the
   1175      :ref:`filesystem encoding <filesystem-encoding>`.
   1176 
   1177    The first string specifies the program executable,
   1178    and the remaining strings specify the arguments.  Together, string
   1179    arguments form the ``argv`` of the program.
   1180 
   1181    This is similar to the standard library :class:`subprocess.Popen`
   1182    class called with ``shell=False`` and the list of strings passed as
   1183    the first argument; however, where :class:`~subprocess.Popen` takes
   1184    a single argument which is list of strings, *subprocess_exec*
   1185    takes multiple string arguments.
   1186 
   1187    The *protocol_factory* must be a callable returning a subclass of the
   1188    :class:`asyncio.SubprocessProtocol` class.
   1189 
   1190    Other parameters:
   1191 
   1192    * *stdin*: either a file-like object representing a pipe to be
   1193      connected to the subprocess's standard input stream using
   1194      :meth:`~loop.connect_write_pipe`, or the
   1195      :const:`subprocess.PIPE`  constant (default). By default a new
   1196      pipe will be created and connected.
   1197 
   1198    * *stdout*: either a file-like object representing the pipe to be
   1199      connected to the subprocess's standard output stream using
   1200      :meth:`~loop.connect_read_pipe`, or the
   1201      :const:`subprocess.PIPE` constant (default). By default a new pipe
   1202      will be created and connected.
   1203 
   1204    * *stderr*: either a file-like object representing the pipe to be
   1205      connected to the subprocess's standard error stream using
   1206      :meth:`~loop.connect_read_pipe`, or one of
   1207      :const:`subprocess.PIPE` (default) or :const:`subprocess.STDOUT`
   1208      constants.
   1209 
   1210      By default a new pipe will be created and connected. When
   1211      :const:`subprocess.STDOUT` is specified, the subprocess' standard
   1212      error stream will be connected to the same pipe as the standard
   1213      output stream.
   1214 
   1215    * All other keyword arguments are passed to :class:`subprocess.Popen`
   1216      without interpretation, except for *bufsize*, *universal_newlines*
   1217      and *shell*, which should not be specified at all.
   1218 
   1219    See the constructor of the :class:`subprocess.Popen` class
   1220    for documentation on other arguments.
   1221 
   1222    Returns a pair of ``(transport, protocol)``, where *transport*
   1223    conforms to the :class:`asyncio.SubprocessTransport` base class and
   1224    *protocol* is an object instantiated by the *protocol_factory*.
   1225 
   1226 .. coroutinemethod:: loop.subprocess_shell(protocol_factory, cmd, \*, \
   1227                         stdin=subprocess.PIPE, stdout=subprocess.PIPE, \
   1228                         stderr=subprocess.PIPE, \*\*kwargs)
   1229 
   1230    Create a subprocess from *cmd*, which can be a :class:`str` or a
   1231    :class:`bytes` string encoded to the
   1232    :ref:`filesystem encoding <filesystem-encoding>`,
   1233    using the platform's "shell" syntax.
   1234 
   1235    This is similar to the standard library :class:`subprocess.Popen`
   1236    class called with ``shell=True``.
   1237 
   1238    The *protocol_factory* must be a callable returning a subclass of the
   1239    :class:`SubprocessProtocol` class.
   1240 
   1241    See :meth:`~loop.subprocess_exec` for more details about
   1242    the remaining arguments.
   1243 
   1244    Returns a pair of ``(transport, protocol)``, where *transport*
   1245    conforms to the :class:`SubprocessTransport` base class and
   1246    *protocol* is an object instantiated by the *protocol_factory*.
   1247 
   1248 .. note::
   1249    It is the application's responsibility to ensure that all whitespace
   1250    and special characters are quoted appropriately to avoid `shell injection
   1251    <https://en.wikipedia.org/wiki/Shell_injection#Shell_injection>`_
   1252    vulnerabilities. The :func:`shlex.quote` function can be used to
   1253    properly escape whitespace and special characters in strings that
   1254    are going to be used to construct shell commands.
   1255 
   1256 
   1257 Callback Handles
   1258 ================
   1259 
   1260 .. class:: Handle
   1261 
   1262    A callback wrapper object returned by :meth:`loop.call_soon`,
   1263    :meth:`loop.call_soon_threadsafe`.
   1264 
   1265    .. method:: cancel()
   1266 
   1267       Cancel the callback.  If the callback has already been canceled
   1268       or executed, this method has no effect.
   1269 
   1270    .. method:: cancelled()
   1271 
   1272       Return ``True`` if the callback was cancelled.
   1273 
   1274       .. versionadded:: 3.7
   1275 
   1276 .. class:: TimerHandle
   1277 
   1278    A callback wrapper object returned by :meth:`loop.call_later`,
   1279    and :meth:`loop.call_at`.
   1280 
   1281    This class is a subclass of :class:`Handle`.
   1282 
   1283    .. method:: when()
   1284 
   1285       Return a scheduled callback time as :class:`float` seconds.
   1286 
   1287       The time is an absolute timestamp, using the same time
   1288       reference as :meth:`loop.time`.
   1289 
   1290       .. versionadded:: 3.7
   1291 
   1292 
   1293 Server Objects
   1294 ==============
   1295 
   1296 Server objects are created by :meth:`loop.create_server`,
   1297 :meth:`loop.create_unix_server`, :func:`start_server`,
   1298 and :func:`start_unix_server` functions.
   1299 
   1300 Do not instantiate the class directly.
   1301 
   1302 .. class:: Server
   1303 
   1304    *Server* objects are asynchronous context managers.  When used in an
   1305    ``async with`` statement, it's guaranteed that the Server object is
   1306    closed and not accepting new connections when the ``async with``
   1307    statement is completed::
   1308 
   1309       srv = await loop.create_server(...)
   1310 
   1311       async with srv:
   1312           # some code
   1313 
   1314       # At this point, srv is closed and no longer accepts new connections.
   1315 
   1316 
   1317    .. versionchanged:: 3.7
   1318       Server object is an asynchronous context manager since Python 3.7.
   1319 
   1320    .. method:: close()
   1321 
   1322       Stop serving: close listening sockets and set the :attr:`sockets`
   1323       attribute to ``None``.
   1324 
   1325       The sockets that represent existing incoming client connections
   1326       are left open.
   1327 
   1328       The server is closed asynchronously, use the :meth:`wait_closed`
   1329       coroutine to wait until the server is closed.
   1330 
   1331    .. method:: get_loop()
   1332 
   1333       Return the event loop associated with the server object.
   1334 
   1335       .. versionadded:: 3.7
   1336 
   1337    .. coroutinemethod:: start_serving()
   1338 
   1339       Start accepting connections.
   1340 
   1341       This method is idempotent, so it can be called when
   1342       the server is already being serving.
   1343 
   1344       The *start_serving* keyword-only parameter to
   1345       :meth:`loop.create_server` and
   1346       :meth:`asyncio.start_server` allows creating a Server object
   1347       that is not accepting connections initially.  In this case
   1348       ``Server.start_serving()``, or :meth:`Server.serve_forever` can be used
   1349       to make the Server start accepting connections.
   1350 
   1351       .. versionadded:: 3.7
   1352 
   1353    .. coroutinemethod:: serve_forever()
   1354 
   1355       Start accepting connections until the coroutine is cancelled.
   1356       Cancellation of ``serve_forever`` task causes the server
   1357       to be closed.
   1358 
   1359       This method can be called if the server is already accepting
   1360       connections.  Only one ``serve_forever`` task can exist per
   1361       one *Server* object.
   1362 
   1363       Example::
   1364 
   1365           async def client_connected(reader, writer):
   1366               # Communicate with the client with
   1367               # reader/writer streams.  For example:
   1368               await reader.readline()
   1369 
   1370           async def main(host, port):
   1371               srv = await asyncio.start_server(
   1372                   client_connected, host, port)
   1373               await srv.serve_forever()
   1374 
   1375           asyncio.run(main('127.0.0.1', 0))
   1376 
   1377       .. versionadded:: 3.7
   1378 
   1379    .. method:: is_serving()
   1380 
   1381       Return ``True`` if the server is accepting new connections.
   1382 
   1383       .. versionadded:: 3.7
   1384 
   1385    .. coroutinemethod:: wait_closed()
   1386 
   1387       Wait until the :meth:`close` method completes.
   1388 
   1389    .. attribute:: sockets
   1390 
   1391       List of :class:`socket.socket` objects the server is listening on,
   1392       or ``None`` if the server is closed.
   1393 
   1394       .. versionchanged:: 3.7
   1395          Prior to Python 3.7 ``Server.sockets`` used to return an
   1396          internal list of server sockets directly.  In 3.7 a copy
   1397          of that list is returned.
   1398 
   1399 
   1400 .. _asyncio-event-loops:
   1401 
   1402 Event Loop Implementations
   1403 ==========================
   1404 
   1405 asyncio ships with two different event loop implementations:
   1406 :class:`SelectorEventLoop` and :class:`ProactorEventLoop`.
   1407 
   1408 By default asyncio is configured to use :class:`SelectorEventLoop`
   1409 on all platforms.
   1410 
   1411 
   1412 .. class:: SelectorEventLoop
   1413 
   1414    An event loop based on the :mod:`selectors` module.
   1415 
   1416    Uses the most efficient *selector* available for the given
   1417    platform.  It is also possible to manually configure the
   1418    exact selector implementation to be used::
   1419 
   1420       import asyncio
   1421       import selectors
   1422 
   1423       selector = selectors.SelectSelector()
   1424       loop = asyncio.SelectorEventLoop(selector)
   1425       asyncio.set_event_loop(loop)
   1426 
   1427 
   1428    .. availability:: Unix, Windows.
   1429 
   1430 
   1431 .. class:: ProactorEventLoop
   1432 
   1433    An event loop for Windows that uses "I/O Completion Ports" (IOCP).
   1434 
   1435    .. availability:: Windows.
   1436 
   1437    An example how to use :class:`ProactorEventLoop` on Windows::
   1438 
   1439         import asyncio
   1440         import sys
   1441 
   1442         if sys.platform == 'win32':
   1443             loop = asyncio.ProactorEventLoop()
   1444             asyncio.set_event_loop(loop)
   1445 
   1446    .. seealso::
   1447 
   1448       `MSDN documentation on I/O Completion Ports
   1449       <https://docs.microsoft.com/en-ca/windows/desktop/FileIO/i-o-completion-ports>`_.
   1450 
   1451 
   1452 .. class:: AbstractEventLoop
   1453 
   1454    Abstract base class for asyncio-compliant event loops.
   1455 
   1456    The :ref:`Event Loop Methods <asyncio-event-loop>` section lists all
   1457    methods that an alternative implementation of ``AbstractEventLoop``
   1458    should have defined.
   1459 
   1460 
   1461 Examples
   1462 ========
   1463 
   1464 Note that all examples in this section **purposefully** show how
   1465 to use the low-level event loop APIs, such as :meth:`loop.run_forever`
   1466 and :meth:`loop.call_soon`.  Modern asyncio applications rarely
   1467 need to be written this way; consider using the high-level functions
   1468 like :func:`asyncio.run`.
   1469 
   1470 
   1471 .. _asyncio_example_lowlevel_helloworld:
   1472 
   1473 Hello World with call_soon()
   1474 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   1475 
   1476 An example using the :meth:`loop.call_soon` method to schedule a
   1477 callback. The callback displays ``"Hello World"`` and then stops the
   1478 event loop::
   1479 
   1480     import asyncio
   1481 
   1482     def hello_world(loop):
   1483         """A callback to print 'Hello World' and stop the event loop"""
   1484         print('Hello World')
   1485         loop.stop()
   1486 
   1487     loop = asyncio.get_event_loop()
   1488 
   1489     # Schedule a call to hello_world()
   1490     loop.call_soon(hello_world, loop)
   1491 
   1492     # Blocking call interrupted by loop.stop()
   1493     try:
   1494         loop.run_forever()
   1495     finally:
   1496         loop.close()
   1497 
   1498 .. seealso::
   1499 
   1500    A similar :ref:`Hello World <coroutine>`
   1501    example created with a coroutine and the :func:`run` function.
   1502 
   1503 
   1504 .. _asyncio_example_call_later:
   1505 
   1506 Display the current date with call_later()
   1507 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   1508 
   1509 An example of a callback displaying the current date every second. The
   1510 callback uses the :meth:`loop.call_later` method to reschedule itself
   1511 after 5 seconds, and then stops the event loop::
   1512 
   1513     import asyncio
   1514     import datetime
   1515 
   1516     def display_date(end_time, loop):
   1517         print(datetime.datetime.now())
   1518         if (loop.time() + 1.0) < end_time:
   1519             loop.call_later(1, display_date, end_time, loop)
   1520         else:
   1521             loop.stop()
   1522 
   1523     loop = asyncio.get_event_loop()
   1524 
   1525     # Schedule the first call to display_date()
   1526     end_time = loop.time() + 5.0
   1527     loop.call_soon(display_date, end_time, loop)
   1528 
   1529     # Blocking call interrupted by loop.stop()
   1530     try:
   1531         loop.run_forever()
   1532     finally:
   1533         loop.close()
   1534 
   1535 .. seealso::
   1536 
   1537    A similar :ref:`current date <asyncio_example_sleep>` example
   1538    created with a coroutine and the :func:`run` function.
   1539 
   1540 
   1541 .. _asyncio_example_watch_fd:
   1542 
   1543 Watch a file descriptor for read events
   1544 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   1545 
   1546 Wait until a file descriptor received some data using the
   1547 :meth:`loop.add_reader` method and then close the event loop::
   1548 
   1549     import asyncio
   1550     from socket import socketpair
   1551 
   1552     # Create a pair of connected file descriptors
   1553     rsock, wsock = socketpair()
   1554 
   1555     loop = asyncio.get_event_loop()
   1556 
   1557     def reader():
   1558         data = rsock.recv(100)
   1559         print("Received:", data.decode())
   1560 
   1561         # We are done: unregister the file descriptor
   1562         loop.remove_reader(rsock)
   1563 
   1564         # Stop the event loop
   1565         loop.stop()
   1566 
   1567     # Register the file descriptor for read event
   1568     loop.add_reader(rsock, reader)
   1569 
   1570     # Simulate the reception of data from the network
   1571     loop.call_soon(wsock.send, 'abc'.encode())
   1572 
   1573     try:
   1574         # Run the event loop
   1575         loop.run_forever()
   1576     finally:
   1577         # We are done. Close sockets and the event loop.
   1578         rsock.close()
   1579         wsock.close()
   1580         loop.close()
   1581 
   1582 .. seealso::
   1583 
   1584    * A similar :ref:`example <asyncio_example_create_connection>`
   1585      using transports, protocols, and the
   1586      :meth:`loop.create_connection` method.
   1587 
   1588    * Another similar :ref:`example <asyncio_example_create_connection-streams>`
   1589      using the high-level :func:`asyncio.open_connection` function
   1590      and streams.
   1591 
   1592 
   1593 .. _asyncio_example_unix_signals:
   1594 
   1595 Set signal handlers for SIGINT and SIGTERM
   1596 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   1597 
   1598 (This ``signals`` example only works on Unix.)
   1599 
   1600 Register handlers for signals :py:data:`SIGINT` and :py:data:`SIGTERM`
   1601 using the :meth:`loop.add_signal_handler` method::
   1602 
   1603     import asyncio
   1604     import functools
   1605     import os
   1606     import signal
   1607 
   1608     def ask_exit(signame):
   1609         print("got signal %s: exit" % signame)
   1610         loop.stop()
   1611 
   1612     async def main():
   1613         loop = asyncio.get_running_loop()
   1614 
   1615         for signame in {'SIGINT', 'SIGTERM'}:
   1616             loop.add_signal_handler(
   1617                 getattr(signal, signame),
   1618                 functools.partial(ask_exit, signame))
   1619 
   1620         await asyncio.sleep(3600)
   1621 
   1622     print("Event loop running for 1 hour, press Ctrl+C to interrupt.")
   1623     print(f"pid {os.getpid()}: send SIGINT or SIGTERM to exit.")
   1624 
   1625     asyncio.run(main())
   1626