Python 3.4+Асинхронное программированиепонятие
asyncio.SelectorEventLoop
event loop
Цикл событий на модуле selectors: ждёт готовности сокетов через select/epoll/kqueue. На Linux и macOS именно он создаётся по умолчанию.
Синтаксис
with asyncio.Runner(loop_factory=asyncio.SelectorEventLoop) as runner: ...
Явно его выбирают в одном случае: на Windows по умолчанию работает ProactorEventLoop, а некоторым библиотекам (например, старым драйверам баз данных) нужен именно SelectorEventLoop. Цена на Windows — нет поддержки подпроцессов (create_subprocess_exec даст NotImplementedError) и предел в 512 сокетов у select(). Передавайте класс фабрикой — asyncio.Runner(loop_factory=asyncio.SelectorEventLoop), — а не через устаревшие политики циклов.
Примеры
# Python 3.11+
import asyncio
async def main():
await asyncio.sleep(0.01)
return type(asyncio.get_running_loop()).__name__
with asyncio.Runner(loop_factory=asyncio.SelectorEventLoop) as runner:
print(runner.run(main())) # → SelectorEventLoop
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности