Python Web & Scripts — Django, FastAPI, скрипты
Foto
zum Anzeigen klicken
zum Anzeigen klicken
asyncio ломается не в event loop, а в том, как вы смешиваете ожидание и блокировки
В `asyncio` главная ошибка — считать, что `async def` автоматически делает код быстрым. Нет: если внутри сидит `time.sleep()`, тяжёлый `requests` или CPU-цикл, вы просто стопорите весь loop.
Три правила, которые спасают проекты:
• всё сетевое и I/O — через `await`;
• блокирующее выносите в `asyncio.to_thread()` или отдельный worker;
• не держите `await` внутри критической секции дольше, чем нужно.
Ещё одна типовая ловушка — запускать много задач без ограничений. `gather()` удобен, но без `Semaphore` легко устроить шип пик по памяти, соединениям и лимитам внешнего API. Для интеграций лучше сначала задать потолок параллелизма, потом масштабировать.
Если видите «async code», ищите два места: где реально есть `await`, и где код тихо работает синхронно. Обычно именно там и лежит узкое горло.
6 ·