Python Glossary English

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