PoliciesПолитики
Предупреждение
Политики устарели и будут удалены в Python 3.16.
Пользователям рекомендуется использовать функцию asyncio.run()
или asyncio.Runner с loop_factory для использования
нужной реализации цикла событий.
Политика цикла событий – это глобальный объект, используемый для получения и установки текущего цикла событий, а также для создания новых циклов событий. Политику по умолчанию можно заменить на встроенные альтернативы для использования различных реализаций цикла событий, или заменить на пользовательскую политику которая может переопределять эти поведения.
Объект политики получает и устанавливает отдельный цикл событий для каждого контекста. По умолчанию это для каждого потока, хотя пользовательские политики могут определять контекст иначе.
Пользовательские политики цикла событий могут управлять поведением
get_event_loop(), set_event_loop() и new_event_loop().
Объекты политики должны реализовывать API, определённые
в абстрактном базовом классе AbstractEventLoopPolicy.
Getting and Setting the PolicyПолучение и установка политики
Следующие функции можно использовать для получения и установки политики для текущего процесса:
- asyncio.get_event_loop_policy()¶
Возвращает текущую общепроцессную политику.
Устарело с версии 3.14: Функция
get_event_loop_policy()устарела и будет удалена в Python 3.16.
- asyncio.set_event_loop_policy(policy)¶
Устанавливает политику текущего процесса на policy.
Если policy установлено в
None, восстанавливается политика по умолчанию.Устарело с версии 3.14: Функция
set_event_loop_policy()устарела и будет удалена в Python 3.16.
Policy ObjectsОбъекты политики
Абстрактный базовый класс политики цикла событий определён следующим образом:
- class asyncio.AbstractEventLoopPolicy¶
Абстрактный базовый класс для политик asyncio.
- get_event_loop()¶
Получает цикл событий для текущего контекста.
Возвращает объект цикла событий, реализующий интерфейс
AbstractEventLoop.Этот метод никогда не должен возвращать
None.Изменено в версии 3.6.
- set_event_loop(loop)¶
Устанавливает цикл событий для текущего контекста в loop.
- new_event_loop()¶
Создает и возвращает новый объект цикла событий.
Этот метод никогда не должен возвращать
None.
Устарело с версии 3.14: Класс
AbstractEventLoopPolicyустарел и будет удалён в Python 3.16.
asyncio поставляется со следующими встроенными политиками:
- class asyncio.DefaultEventLoopPolicy¶
Политика asyncio по умолчанию. Использует
SelectorEventLoopв Unix иProactorEventLoopв Windows.Не требуется устанавливать политику по умолчанию вручную. asyncio настроена на автоматическое использование политики по умолчанию.
Изменено в версии 3.8: В Windows,
ProactorEventLoopтеперь используется по умолчанию.Изменено в версии 3.14: Метод
get_event_loop()политики asyncio по умолчанию теперь вызываетRuntimeError, если не установлен цикл событий.Устарело с версии 3.14: Класс
DefaultEventLoopPolicyустарел и будет удалён в Python 3.16.
- class asyncio.WindowsSelectorEventLoopPolicy¶
Альтернативная политика цикла событий, использующая реализацию
SelectorEventLoopцикла событий.Доступность: Windows.
Устарело с версии 3.14: Класс
WindowsSelectorEventLoopPolicyустарел и будет удалён в Python 3.16.
- class asyncio.WindowsProactorEventLoopPolicy¶
Альтернативная политика цикла событий, использующая реализацию
ProactorEventLoopцикла событий.Доступность: Windows.
Устарело с версии 3.14: Класс
WindowsProactorEventLoopPolicyустарел и будет удалён в Python 3.16.
Custom PoliciesПользовательские политики
Чтобы реализовать новую политику цикла событий, рекомендуется создать подкласс
DefaultEventLoopPolicy и переопределить методы, для которых
требуется настраиваемое поведение, например:
class MyEventLoopPolicy(asyncio.DefaultEventLoopPolicy):
def get_event_loop(self):
"""Get the event loop.
This may be None or an instance of EventLoop.
"""
loop = super().get_event_loop()
# Сделать что-то с loop ...
return loop
asyncio.set_event_loop_policy(MyEventLoopPolicy())