політики

An event loop policy is a global object used to get and set the current event loop, as well as create new event loops. The default policy can be replaced with built-in alternatives to use different event loop implementations, or substituted by a custom policy that can override these behaviors.

The policy object gets and sets a separate event loop per context. This is per-thread by default, though custom policies could define context differently.

Custom event loop policies can control the behavior of get_event_loop(), set_event_loop(), and new_event_loop().

Об’єкти політики мають реалізовувати API, визначені в AbstractEventLoopPolicy абстрактному базовому класі.

Отримання та налаштування політики

Наступні функції можна використовувати для отримання та налаштування політики для поточного процесу:

asyncio.get_event_loop_policy()

Повернути поточну політику для всього процесу.

asyncio.set_event_loop_policy(policy)

Установіть поточну політику для всього процесу на policy.

Якщо policy встановлено на None, політика за замовчуванням буде відновлена.

Об’єкти політики

Базовий клас політики абстрактного циклу подій визначається наступним чином:

class asyncio.AbstractEventLoopPolicy

Абстрактний базовий клас для асинхронних політик.

get_event_loop()

Отримати цикл подій для поточного контексту.

Повертає об’єкт циклу подій, що реалізує інтерфейс AbstractEventLoop.

Цей метод ніколи не повинен повертати None.

Змінено в версії 3.6.

set_event_loop(loop)

Встановіть для циклу подій для поточного контексту значення loop.

new_event_loop()

Створити та повернути новий об’єкт циклу подій.

Цей метод ніколи не повинен повертати None.

asyncio поставляється з такими вбудованими політиками:

class asyncio.DefaultEventLoopPolicy

Стандартна асинхронна політика. Використовує SelectorEventLoop в Unix і ProactorEventLoop у Windows.

Немає необхідності встановлювати стандартну політику вручну. asyncio налаштовано на автоматичне використання політики за замовчуванням.

Змінено в версії 3.8: У Windows ProactorEventLoop тепер використовується за замовчуванням.

Застаріло починаючи з версії 3.12: The get_event_loop() method of the default asyncio policy now emits a DeprecationWarning if there is no current event loop set and it decides to create one. In some future Python release this will become an error.

class asyncio.WindowsSelectorEventLoopPolicy

Альтернативна політика циклу подій, яка використовує реалізацію циклу подій SelectorEventLoop.

Наявність: Windows.

class asyncio.WindowsProactorEventLoopPolicy

Альтернативна політика циклу подій, яка використовує реалізацію циклу подій ProactorEventLoop.

Наявність: Windows.

Спеціальна політика

Щоб запровадити нову політику циклу подій, рекомендується створити підклас 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())