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Сообщить о неточности