Python Web & Scripts — Django, FastAPI, скрипты
asyncio ломают не await, а неправильные границы задач и блокирующий код
За неделю в репах чаще всего вижу один и тот же паттерн: async-функции есть, а поведение — как у обычного скрипта с подвисаниями. Причина обычно в двух местах:
— внутри корутины спрятан sync I/O: requests, тяжелый парсинг, запись на диск
— задачи запускают, но не собирают ошибки и не ограничивают параллелизм
Если внутри event loop появляется блокировка, он перестает обслуживать остальные корутины. Поэтому любой код, который может ждать сеть, БД или файловую систему, надо либо уносить в нативный async-стек, либо выносить в thread/process pool. Иначе asyncio превращается в красивую обертку над последовательным выполнением.
Второй частый провал — “создали 1000 задач и ждем”. Так код легко убить памятью и внешним API. Нормальная схема: очередь, семафор, timeout, явная обработка исключений. И еще правило: если задача не нужна в фоне, не делайте fire-and-forget без ссылки и логирования.
Проверьте свой проект одной правкой: найдите все места, где async-функция вызывает sync-библиотеку без адаптера. Обычно после этого становятся видны и тормоза, и странные таймауты, и “пропавшие” ошибки.
2 ·