Сколько event loop’ов asyncio может быть активно в одном потоке Python

Ответ

В одном потоке Python может быть только один активный (running) event loop asyncio.

Почему так?

Event loop является центральным диспетчером, который управляет всеми асинхронными задачами, колбэками и сетевыми событиями в рамках одного потока. Наличие двух одновременно работающих диспетчеров привело бы к неопределенному поведению и конфликтам.

Хотя можно создать несколько экземпляров event loop, запустить (run_until_complete, run_forever) можно только один. Попытка запустить или получить другой event loop, когда один уже активен, вызовет ошибку RuntimeError.

Пример:

import asyncio

async def main():
    print("Основной event loop работает")
    # Попытка создать и запустить вложенный loop приведет к ошибке
    try:
        loop = asyncio.new_event_loop()
        loop.run_forever() # Эта строка вызовет RuntimeError
    except RuntimeError as e:
        print(f"Ошибка: {e}")

# asyncio.run() автоматически создает, запускает и закрывает event loop
asyncio.run(main())

Для реализации настоящего параллелизма с несколькими event loop'ами каждый из них должен работать в своем собственном потоке (threading).