Сообщить об ошибке.

Менеджер контекста Runner() модуля asyncio в Python

Менеджер контекста для вызовы нескольких асинхронных функций

Синтаксис:

import asyncio

# новое в Python 3.11
with asyncio.Runner(*, debug=None, loop_factory=None) as runner:
    runner.run(main())

Параметры:

  • debug=None - режиме отладки,
  • loop_factory=None - переопределяет создания цикла событий.

Возвращаемое значение:

Описание asyncio.Runner():

Класс Runner() модуля asyncio представляет собой менеджер контекста, упрощающий вызовы нескольких асинхронных функций в одном контексте.

Иногда в одном и том же цикле событий и contextvars.Context следует вызывать несколько асинхронных функций верхнего уровня.

Если для аргумента debug установлено значение True, то цикл обработки событий будет выполняться в режиме отладки. False явно отключает режим отладки. None используется для соблюдения глобальных настроек режима отладки.

Аргумент loop_factory можно использовать для переопределения создания цикла. В обязанности loop_factory входит установка созданного цикла в качестве текущего. По умолчанию (если loop_factory имеет значение None) для создания цикла событий используется asyncio.new_event_loop(), а как текущий цикл событий устанавливается с помощью функции asyncio.set_event_loop().

По сути, пример asyncio.run() можно переписать с использованием asyncio.Runner():

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

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

Методы менеджера контекста Runner.

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

Метод Runner.run() запускает сопрограмму coro во встроенном цикле. Возвращает результат сопрограммы или вызывает ее исключение.

Необязательный ключевой аргумент context, позволяет указать пользовательский contextvars.Context для запуска сопрограммы. Если context=None, то по умолчанию используется контекст Runner.

Эта функция не может быть вызвана, когда в том же потоке выполняется другой цикл обработки событий asyncio.

Runner.close():

Метод Runner.close() закрывает менеджера контекста Runner.

Завершает работу асинхронных генераторов, завершает работу исполнителя по умолчанию, закрывает цикл обработки событий и освобождает встроенные переменные contextvars.Context.

Runner.get_loop():

Метод Runner.get_loop() Вернуть цикл обработки событий, связанный с экземпляром бегуна.

Примечание. Runner использует стратегию ленивой инициализации, его конструктор не инициализирует нижележащие низкоуровневые структуры.

Встроенный цикл событий loop и контекст context создаются при входе в with или при первом вызове Runner.run() или Runner.get_loop().