політики

Peringatan

Policies are deprecated and will be removed in Python 3.16. Users are encouraged to use the asyncio.run() function or the asyncio.Runner with loop_factory to use the desired loop implementation.

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()

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

Ditinggalkan sejak versi 3.14: The get_event_loop_policy() function is deprecated and will be removed in Python 3.16.

asyncio.set_event_loop_policy(policy)

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

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

Ditinggalkan sejak versi 3.14: The set_event_loop_policy() function is deprecated and will be removed in Python 3.16.

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

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

class asyncio.AbstractEventLoopPolicy

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

get_event_loop()

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

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

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

Berubah pada versi 3.6.

set_event_loop(loop)

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

new_event_loop()

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

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

Ditinggalkan sejak versi 3.14: The AbstractEventLoopPolicy class is deprecated and will be removed in Python 3.16.

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

class asyncio.DefaultEventLoopPolicy

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

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

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

Berubah pada versi 3.14: The get_event_loop() method of the default asyncio policy now raises a RuntimeError if there is no set event loop.

Ditinggalkan sejak versi 3.14: The DefaultEventLoopPolicy class is deprecated and will be removed in Python 3.16.

class asyncio.WindowsSelectorEventLoopPolicy

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

Availability: Windows.

Ditinggalkan sejak versi 3.14: The WindowsSelectorEventLoopPolicy class is deprecated and will be removed in Python 3.16.

class asyncio.WindowsProactorEventLoopPolicy

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

Availability: Windows.

Ditinggalkan sejak versi 3.14: The WindowsProactorEventLoopPolicy class is deprecated and will be removed in 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())