Документация Python неофициальный перевод
Содержание страницы

Политики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.

Устарело с версии 3.14: Класс WindowsSelectorEventLoopPolicy устарел и будет удалён в Python 3.16.

class asyncio.WindowsProactorEventLoopPolicy

Альтернативная политика цикла событий, использующая реализацию цикла событий ProactorEventLoop.

Устарело с версии 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())