Содержание страницы
Политики¶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):
"""Получить цикл событий.
Это может быть None или экземпляр EventLoop.
"""
loop = super().get_event_loop()
# Сделать что-то с циклом ...
return loop
asyncio.set_event_loop_policy(MyEventLoopPolicy())