Что такое event loop в Python
Что проверяют
Понимаете ли вы, что асинхронность в Python это кооперативная многозадачность в одном потоке, а не параллелизм.
Как отвечать
Цикл событий это планировщик из asyncio, который в одном потоке выполняет корутины. Пока корутина считает, цикл занят ею целиком. Как только она доходит до await над операцией ввода-вывода, управление возвращается циклу, и он берёт следующую готовую задачу.
async def main():
results = await asyncio.gather(fetch(url1), fetch(url2)) # запросы идут одновременно
asyncio.run(main())Ключевые понятия: корутина (объект, полученный вызовом async def), задача (asyncio.create_task, корутина, поставленная в цикл), будущий результат.
Что важно понимать про границы: цикл не создаёт потоков и не обходит GIL. Он выигрывает там, где программа ждёт сеть или диск, и ничего не даёт на вычислениях. Тяжёлый расчёт внутри корутины блокирует весь цикл, включая все остальные задачи, и лечится выносом в run_in_executor или в отдельный процесс.
Вторая частая ловушка: синхронная библиотека (requests, обычный драйвер базы) блокирует цикл так же, как расчёт. В асинхронном коде нужны асинхронные клиенты.
Где спотыкаются
Говорят, что asyncio даёт многопоточность.
Зовут time.sleep вместо asyncio.sleep и останавливают весь цикл.
Пишут последовательные await там, где нужен gather, и не получают никакого выигрыша.
Создают задачу и не сохраняют ссылку на неё, из-за чего сборщик мусора может её убрать до завершения.