політики¶
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 aRuntimeError
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())