політики¶
Попередження
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()¶
Повернути поточну політику для всього процесу.
Застаріло починаючи з версії 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, політика за замовчуванням буде відновлена.Застаріло починаючи з версії 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.Змінено в версії 3.6.
- set_event_loop(loop)¶
Встановіть для циклу подій для поточного контексту значення loop.
- new_event_loop()¶
Створити та повернути новий об’єкт циклу подій.
Цей метод ніколи не повинен повертати
None.
Застаріло починаючи з версії 3.14: The
AbstractEventLoopPolicyclass is deprecated and will be removed in Python 3.16.
asyncio поставляється з такими вбудованими політиками:
- class asyncio.DefaultEventLoopPolicy¶
Стандартна асинхронна політика. Використовує
SelectorEventLoopв Unix іProactorEventLoopу Windows.Немає необхідності встановлювати стандартну політику вручну. asyncio налаштовано на автоматичне використання політики за замовчуванням.
Змінено в версії 3.8: У Windows
ProactorEventLoopтепер використовується за замовчуванням.Змінено в версії 3.14: The
get_event_loop()method of the default asyncio policy now raises aRuntimeErrorif there is no set event loop.Застаріло починаючи з версії 3.14: The
DefaultEventLoopPolicyclass is deprecated and will be removed in Python 3.16.
- class asyncio.WindowsSelectorEventLoopPolicy¶
Альтернативна політика циклу подій, яка використовує реалізацію циклу подій
SelectorEventLoop.Availability: Windows.
Застаріло починаючи з версії 3.14: The
WindowsSelectorEventLoopPolicyclass is deprecated and will be removed in Python 3.16.
- class asyncio.WindowsProactorEventLoopPolicy¶
Альтернативна політика циклу подій, яка використовує реалізацію циклу подій
ProactorEventLoop.Availability: Windows.
Застаріло починаючи з версії 3.14: The
WindowsProactorEventLoopPolicyclass 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())