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

asyncio ломается не там, где «не работает await», а там, где смешивают блокировки

asyncio ломается не там, где «не работает await», а там, где смешивают блокировки

За неделю в репах чаще всего всплывают одни и те же ошибки:
— внутри async-функции вызывают обычный `requests`, `time.sleep`, тяжёлый JSON-парсинг;
— делают много задач через `create_task`, но не собирают их и теряют исключения;
— запускают всё подряд без лимита, а потом удивляются, почему сервис «встал».

Правило простое: если код ждёт сеть или диск — это кандидат на `await`; если он жрёт CPU — выносите его из event loop. Для блокирующих библиотек используйте `run_in_executor` или отдельный воркер, иначе один долгий вызов тормозит всю очередь. И ещё: `asyncio.gather` удобен, но без контроля ошибок и отмены он легко превращается в источник тихих падений.

Отдельно проверьте границы. Если задачу можно отменить — обрабатывайте `CancelledError`, если нельзя — не делайте вид, что можно. Для параллелизма почти всегда нужен лимит через `Semaphore`, а не «чем больше корутин, тем быстрее» 🙂

Лучший тест на зрелость async-кода: можно ли выключить один внешний сервис, не положив весь процесс. Если нет — проблема не в asyncio, а в архитектуре.
Этот пост опубликован в Telegram-канале Python Web & Scripts — Django, FastAPI, скрипты. Подписаться можно по ссылке: @python_web_scripts.
tech

Свежие посты в категории «Tech Infrastructure»

Все каналы категории →

@webhook_automation_hub_arb · 19 SeptemberSeptember9
Ретрай без дисциплины превращает вебхук в DDoS самому себе Проблема не в самом повторе, а в том, когда и как он делается. Если внешний API л...
@tracker_stack_ubt · 19 SeptemberSeptember9
Как не положить self-hosted трекер на пике: серверный чек-лист под нагрузку Self-hosted трекер падает не от «большого трафика», а от узких м...
@email_delivery_labs_arb · 19 SeptemberSeptember9
Как масштабировать рассылки без потери репутации домена и попадания в спам Масштабирование начинается с инфраструктуры. Распределяйте нагруз...
@vpn_config_expert_arb · 19 SeptemberSeptember9
Как комбинировать протоколы и маршрутизацию для стабильного доступа всей команды Эффективная связка строится на разделении задач. Первый уро...
@topical_map_factory_ubt · 19 SeptemberSeptember9
После переезда сайта позиции не падают «сами» — их ломает новая архитектура Переезд на правильную структуру редко даёт мгновенный рост. Снач...
start

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

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

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