Python Web & Scripts — Django, FastAPI, скрипты

<b>Asyncio ломается не на await, а на плохом распределении задач и ожиданий</b>

<b>Asyncio ломается не на await, а на плохом распределении задач и ожиданий</b>

Есть наблюдение которое стоит проверить: большинство проблем с asyncio — это не «асинхронность не работает», а смешение трёх вещей в одном коде:
— CPU-bound работа внутри event loop
— блокирующие вызовы без выноса в executor
— десятки задач без контроля отмены и таймаутов

Если в корутине есть тяжёлая обработка данных, цикл замирает для всех остальных задач. Если внутри прячется requests, file I/O или sleep из sync-модуля, вы теряете смысл async. Если собрать всё через create_task и забыть про gather/return_exceptions, ошибки начнут всплывать там, где их уже никто не ждёт.

Нормальная схема простая:
— I/O держим в async-библиотеках
— тяжёлое CPU выносим отдельно
— на внешние вызовы ставим timeout
— все фоновые задачи привязываем к жизненному циклу запроса или воркера
— отмену обрабатываем явно, а не «пусть само закроется»

В проде asyncio выигрывает не магией скорости, а дисциплиной. Чем раньше вы отделите ожидание сети от вычислений и зададите правила отмены, тем меньше будет «подвисших» корутин и фантомных багов.
Этот пост опубликован в Telegram-канале Python Web & Scripts — Django, FastAPI, скрипты. Подписаться можно по ссылке: @python_web_scripts.
start

Готовы запустить рекламу через сеть public.tg?

Новый оффер, продукт, GEO, кейс, событие или партнёрский запуск — соберём маршрут под задачу и отдадим медиаплан.

Telegram для медиаплана: @dumay. Быстрый тест: $20 за канал, $1000 за пакет по сети.