Подводные камни async в FastAPI
Вопрос
Какие ошибки вы видели в асинхронных сервисах на FastAPI и как их избегать?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Блокирующие вызовы в async def: requests, time.sleep, sync-драйвер БД
Тяжёлые вычисления в цикле событий
Клиенты и пулы на каждый запрос вместо lifespan
Сессия БД вне зависимости с yield, утечка соединений
Fire-and-forget задачи без ссылок и обработки ошибок
Наблюдаемость: таймауты, метрики задержки цикла
Что могут спросить следом
- Как обнаружить блокировку цикла событий в проде?
- Как ограничить параллелизм запросов к внешнему API?
Разбор
Образцовый ответ: «Самая частая ошибка: синхронный вызов в async def, например requests.get или синхронный драйвер БД. Один такой вызов останавливает весь процесс, и задержка растёт у всех запросов сразу. Правило: в async def только асинхронные клиенты, а если библиотека синхронная, либо обычный def, либо asyncio.to_thread. Тяжёлые вычисления тоже блокируют цикл, их выношу в процессы или очередь. Вторая группа: ресурсы. httpx.AsyncClient и пул БД создаю один раз в lifespan, а сессию на запрос отдаю зависимостью с yield, иначе течёт пул соединений. Третья: фоновые задачи через create_task без ссылок и без обработки исключений, они теряются; важное отправляю в очередь. Ещё обязательно таймауты на все внешние вызовы и семафор, чтобы не открыть тысячу соединений к одному API. Блокировки цикла в проде ловлю метриками задержки цикла событий, py-spy и debug-режимом asyncio на стенде».
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «FastAPI и Pydantic»
- Откуда в FastAPI ответ 422
- Annotated в параметрах FastAPI
- BackgroundTasks или очередь задач
- httpx.AsyncClient на каждый запрос
- Разбор и проверка query-параметров
- Граф зависимостей с кешем на запрос
- Подмена зависимостей в тестах
- Сколько раз вызывается зависимость