Политики
Предупреждение
Политики объявлены устаревшими и будут удалены в Python 3.16. Рекомендуется использовать функцию asyncio.run() или asyncio.Runner с параметром loop_factory, чтобы использовать нужную реализацию цикла.
Политика цикла событий — это глобальный объект, используемый для получения и установки текущего цикла событий, а также для создания новых циклов событий. Политику по умолчанию можно заменить на встроенные альтернативы, чтобы использовать другие реализации цикла событий, либо заменить на пользовательскую политику, которая может переопределять такое поведение.
Объект политики получает и устанавливает отдельный цикл событий для каждого контекста. По умолчанию контекст определяется потоком, однако пользовательские политики могут определять контекст иначе.
Пользовательские политики цикла событий могут управлять поведением функций get_event_loop(), set_event_loop() и new_event_loop().
Объекты политик должны реализовывать API, определённые в абстрактном базовом классе AbstractEventLoopPolicy.
Получение и установка политики
Для получения и установки политики текущего процесса можно использовать следующие функции:
-
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.
Объекты политик
Абстрактный базовый класс политики цикла событий определён следующим образом:
-
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.
Пользовательские политики
Для реализации новой политики цикла событий рекомендуется создать подкласс 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()
# Do something with loop ...
return loop
asyncio.set_event_loop_policy(MyEventLoopPolicy())
© 2001 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.14/library/asyncio-policy.html