Python Glossary English

Python 3.4+до 3.16Асинхронное программированиефункция

asyncio.set_event_loop_policy()

event loop

Deprecated: заменяет глобальную политику цикла событий; с 3.14 устарела, removal in 3.16. Замена — loop_factory у asyncio.run() и Runner.

Синтаксис

asyncio.set_event_loop_policy(policy)

Типичный старый рецепт — set_event_loop_policy(uvloop.EventLoopPolicy()) или WindowsSelectorEventLoopPolicy() ради библиотек, не работающих с Proactor. Подмена глобальная: она действует на весь процесс, включая чужие библиотеки и тесты. Сейчас то же делается локально: asyncio.run(main(), loop_factory=uvloop.new_event_loop). set_event_loop_policy(None) возвращает политику по умолчанию.

Примеры

# Python 3.12+
import asyncio
async def main():
    await asyncio.sleep(0.01)
    return 'ок'
# вместо set_event_loop_policy(...) — цикл для одного запуска
print(asyncio.run(main(), loop_factory=asyncio.new_event_loop))  # → ок
import asyncio
import warnings
with warnings.catch_warnings():
    warnings.simplefilter('ignore', DeprecationWarning)  # с 3.14 вызов устарел
    asyncio.set_event_loop_policy(None)  # None — политика по умолчанию
print(asyncio.run(asyncio.sleep(0.01, result='ок')))  # → ок
# Python 3.16+
import asyncio
async def main():
    await asyncio.sleep(0)
    return 'ок'
# вместо set_event_loop_policy(...): один цикл на несколько запусков
with asyncio.Runner(loop_factory=asyncio.EventLoop) as runner:
    print(runner.run(main()), runner.run(main()))   # → ок ок

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности