<b>asyncio ломают не await, а хаотичная отмена и забытые ограничения по I/O</b>
В проектах на Python event loop обычно «падает» не от самой асинхронности, а от плохой дисциплины: один код ждёт сеть, другой держит CPU, третий запускает сотни задач без лимита. В итоге получаются подвисания, утечки задач и странные таймауты.
Что проверять в первую очередь:
• все долгие I/O-операции должны быть неблокирующими;
• CPU-bound куски выносите из loop, иначе async превращается в имитацию;
• любую пачку задач ограничивайте семафором или пулом;
• таймаут ставьте на внешний вызов, а не только на весь запрос;
• отмену задач обрабатывайте явно, а не «на авось».
Ещё одна типовая ошибка — смешивать «fire and forget» с бизнес-логикой. Если задача важна, её нужно хранить, дожидаться результата и уметь повторить. Если не важна — отделяйте её в фон и не делайте вид, что она часть критического пути.
Ещё полезная привычка: логируйте время ожидания, а не только время выполнения. Тогда видно, где код реально работает, а где просто стоит в очереди.
Если в async-сервисе всё «иногда тормозит», сначала ищите не баги в await, а места, где вы забыли лимит, timeout или отмену.
—
Если инструменты — твоя тема, посмотри @DevToolsRadarPro
Python Web & Scripts — Django, FastAPI, скрипты
@python_web_scripts
<b>asyncio ломают не await, а хаотичная отмена и забытые ограничения по I/O</b>
Этот пост опубликован в Telegram-канале Python Web & Scripts — Django, FastAPI, скрипты. Подписаться можно по ссылке: @python_web_scripts.