asyncio ломается не на await, а на блокирующих кусках, которые никто не заметил
За неделю в репах чаще всего всплывают одни и те же ошибки: в async-функции случайно вызывают обычный requests, делают тяжёлый JSON-парсинг прямо в event loop, или держат соединение открытым дольше, чем нужно.
Проверка перед запуском простая:
— любые I/O-запросы только через async-клиенты;
— CPU-тяжёлое выносить в отдельный процесс или хотя бы thread pool;
— на каждый внешний вызов ставить timeout, иначе один зависший endpoint тормозит всю очередь;
— все корутины, которые должны идти параллельно, собирать через gather или TaskGroup, а не ждать по одной.
Ещё одна типовая ошибка — забыть про лимиты конкуренции. Если без throttling поставить сотни задач на один API, вы не ускорите систему, а устроите себе очередь внутри очереди.
Если хотите, чтобы asyncio работал как ускоритель, а не как источник случайных лагов, сначала ищите блокировки и только потом оптимизируйте количество задач.
Python Web & Scripts — Django, FastAPI, скрипты
@python_web_scripts
asyncio ломается не на await, а на блокирующих кусках, которые никто не заметил
Этот пост опубликован в Telegram-канале Python Web & Scripts — Django, FastAPI, скрипты. Подписаться можно по ссылке: @python_web_scripts.