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()
.