asyncio-policy.md
1> **Источник:** https://python-all.ru/3.14/library/asyncio-policy.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Политики89> **Предупреждение**10>11> Политики устарели и будут удалены в Python 3.16. Пользователям рекомендуется использовать функцию [`asyncio.run()`](https://python-all.ru/3.14/library/asyncio-runner.html#asyncio.run) или [`asyncio.Runner`](https://python-all.ru/3.14/library/asyncio-runner.html#asyncio.Runner) с параметром *loop\_factory* для использования нужной реализации цикла событий.1213Политика цикла событий – это глобальный объект, используемый для получения и установки текущего [цикла событий](https://python-all.ru/3.14/library/asyncio-eventloop.html#asyncio-event-loop), а также для создания новых циклов событий. Стандартную политику можно [заменить](https://python-all.ru/3.14/library/asyncio-policy.html#asyncio-policy-get-set) на [встроенные альтернативы](https://python-all.ru/3.14/library/asyncio-policy.html#asyncio-policy-builtin) для использования других реализаций цикла событий или заменить [пользовательской политикой](https://python-all.ru/3.14/library/asyncio-policy.html#asyncio-custom-policies), которая может переопределять это поведение.1415Объект [политики](https://python-all.ru/3.14/library/asyncio-policy.html#asyncio-policy-objects) получает и устанавливает отдельный цикл событий для каждого *контекста*. По умолчанию это выполняется для каждого потока, хотя пользовательские политики могут определять *контекст* иначе.1617Пользовательские политики цикла событий могут управлять поведением [`get_event_loop()`](https://python-all.ru/3.14/library/asyncio-eventloop.html#asyncio.get_event_loop), [`set_event_loop()`](https://python-all.ru/3.14/library/asyncio-eventloop.html#asyncio.set_event_loop) и [`new_event_loop()`](https://python-all.ru/3.14/library/asyncio-eventloop.html#asyncio.new_event_loop).1819Объекты политик должны реализовывать API, определённые в абстрактном базовом классе [`AbstractEventLoopPolicy`](https://python-all.ru/3.14/library/asyncio-policy.html#asyncio.AbstractEventLoopPolicy).2021## Получение и установка политики2223Следующие функции можно использовать для получения и установки политики для текущего процесса:2425#### `asyncio.get_event_loop_policy()`2627Возвращает текущую политику для всего процесса.2829Устарело с версии 3.14: Функция `get_event_loop_policy()` устарела и будет удалена в Python 3.16.3031#### `asyncio.set_event_loop_policy(policy)`3233Устанавливает текущую политику для всего процесса в *policy*.3435Если для *policy* установлено значение `None`, восстанавливается стандартная политика.3637Устарело с версии 3.14: Функция `set_event_loop_policy()` устарела и будет удалена в Python 3.16.3839## Объекты политик4041Абстрактный базовый класс политики цикла событий определяется следующим образом:4243#### `class asyncio.AbstractEventLoopPolicy`4445Абстрактный базовый класс для политик asyncio.4647#### `get_event_loop()`4849Возвращает цикл событий для текущего контекста.5051Возвращает объект цикла событий, реализующий интерфейс [`AbstractEventLoop`](https://python-all.ru/3.14/library/asyncio-eventloop.html#asyncio.AbstractEventLoop).5253Этот метод никогда не должен возвращать `None`.5455Изменено в версии 3.6.5657#### `set_event_loop(loop)`5859Устанавливает цикл событий для текущего контекста равным *loop*.6061#### `new_event_loop()`6263Создаёт и возвращает новый объект цикла событий.6465Этот метод никогда не должен возвращать `None`.6667Устарело с версии 3.14: Класс `AbstractEventLoopPolicy` устарел и будет удалён в Python 3.16.6869asyncio включает следующие встроенные политики:7071#### `class asyncio.DefaultEventLoopPolicy`7273Политика asyncio по умолчанию. Использует [`SelectorEventLoop`](https://python-all.ru/3.14/library/asyncio-eventloop.html#asyncio.SelectorEventLoop) в Unix и [`ProactorEventLoop`](https://python-all.ru/3.14/library/asyncio-eventloop.html#asyncio.ProactorEventLoop) в Windows.7475Нет необходимости устанавливать политику по умолчанию вручную. asyncio настроена на автоматическое использование политики по умолчанию.7677Изменено в версии 3.8: В Windows [`ProactorEventLoop`](https://python-all.ru/3.14/library/asyncio-eventloop.html#asyncio.ProactorEventLoop) теперь используется по умолчанию.7879Изменено в версии 3.14: Метод [`get_event_loop()`](https://python-all.ru/3.14/library/asyncio-eventloop.html#asyncio.get_event_loop) политики asyncio по умолчанию теперь вызывает [`RuntimeError`](https://python-all.ru/3.14/library/exceptions.html#RuntimeError), если цикл событий не установлен.8081Устарело с версии 3.14: Класс `DefaultEventLoopPolicy` устарел и будет удалён в Python 3.16.8283#### `class asyncio.WindowsSelectorEventLoopPolicy`8485Альтернативная политика цикла событий, использующая реализацию цикла событий [`SelectorEventLoop`](https://python-all.ru/3.14/library/asyncio-eventloop.html#asyncio.SelectorEventLoop).8687[Доступность](https://python-all.ru/3.14/library/intro.html#availability): Windows.8889Устарело с версии 3.14: Класс `WindowsSelectorEventLoopPolicy` устарел и будет удалён в Python 3.16.9091#### `class asyncio.WindowsProactorEventLoopPolicy`9293Альтернативная политика цикла событий, использующая реализацию цикла событий [`ProactorEventLoop`](https://python-all.ru/3.14/library/asyncio-eventloop.html#asyncio.ProactorEventLoop).9495[Доступность](https://python-all.ru/3.14/library/intro.html#availability): Windows.9697Устарело с версии 3.14: Класс `WindowsProactorEventLoopPolicy` устарел и будет удалён в Python 3.16.9899## Пользовательские политики100101Для реализации новой политики цикла событий рекомендуется создать подкласс [`DefaultEventLoopPolicy`](https://python-all.ru/3.14/library/asyncio-policy.html#asyncio.DefaultEventLoopPolicy) и переопределить методы, для которых требуется особое поведение, например:102103```python104class MyEventLoopPolicy(asyncio.DefaultEventLoopPolicy):105106 def get_event_loop(self):107 """Получить цикл событий.108109 Это может быть None или экземпляр EventLoop.110 """111 loop = super().get_event_loop()112 # Сделать что-то с циклом ...113 return loop114115asyncio.set_event_loop_policy(MyEventLoopPolicy())116```117