Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Latest commit

 

History

History
121 lines (74 loc) · 3.44 KB

File metadata and controls

121 lines (74 loc) · 3.44 KB
.. currentmodule:: asyncio


Runners

Source code: :source:`Lib/asyncio/runners.py`

This section outlines high-level asyncio primitives to run asyncio code.

They are built on top of an :ref:`event loop <asyncio-event-loop>` with the aim to simplify async code usage for common wide-spread scenarios.

.. function:: run(coro, *, debug=None)

   Execute the :term:`coroutine` *coro* and return the result.

   This function runs the passed coroutine, taking care of
   managing the asyncio event loop, *finalizing asynchronous
   generators*, and closing the threadpool.

   This function cannot be called when another asyncio event loop is
   running in the same thread.

   If *debug* is ``True``, the event loop will be run in debug mode. ``False`` disables
   debug mode explicitly. ``None`` is used to respect the global
   :ref:`asyncio-debug-mode` settings.

   This function always creates a new event loop and closes it at
   the end.  It should be used as a main entry point for asyncio
   programs, and should ideally only be called once.

   Example::

       async def main():
           await asyncio.sleep(1)
           print('hello')

       asyncio.run(main())

   .. versionadded:: 3.7

   .. versionchanged:: 3.9
      Updated to use :meth:`loop.shutdown_default_executor`.

   .. versionchanged:: 3.10

      *debug* is ``None`` by default to respect the global debug mode settings.


A context manager that simplifies multiple async function calls in the same context.

Sometimes several top-level async functions should be called in the same :ref:`event loop <asyncio-event-loop>` and :class:`contextvars.Context`.

If debug is True, the event loop will be run in debug mode. False disables debug mode explicitly. None is used to respect the global :ref:`asyncio-debug-mode` settings.

loop_factory could be used for overriding the loop creation. :func:`asyncio.new_event_loop` is used if None.

Basically, :func:`asyncio.run()` example can be rewritten with the runner usage:

async def main():
    await asyncio.sleep(1)
    print('hello')

with asyncio.Runner() as runner:
    runner.run(main())
.. versionadded:: 3.11

.. method:: run(coro, *, context=None)

   Run a :term:`coroutine <coroutine>` *coro* in the embedded loop.

   Return the coroutine's result or raise its exception.

   An optional keyword-only *context* argument allows specifying a
   custom :class:`contextvars.Context` for the *coro* to run in.
   The runner's default context is used if ``None``.

   This function cannot be called when another asyncio event loop is
   running in the same thread.

.. method:: close()

   Close the runner.

   Finalize asynchronous generators, shutdown default executor, close the event loop
   and release embedded :class:`contextvars.Context`.

.. method:: get_loop()

   Return the event loop associated with the runner instance.

Note

:class:`Runner` uses the lazy initialization strategy, its constructor doesn't initialize underlying low-level structures.

Embedded loop and context are created at the :keyword:`with` body entering or the first call of :meth:`run` or :meth:`get_loop`.