FastAPI: async и блокирующий I/O
В async-обработчике используйте неблокирующий клиент. Обычный def-обработчик подходит для синхронной библиотеки.
Плохо
@app.get("/report")
async def report():
return blocking_sdk.fetch_report()
Хорошо
@app.get("/report")
def report():
return blocking_sdk.fetch_report()
Почему это важно
Синхронный вызов внутри async def блокирует цикл событий. Обычные def-обработчики FastAPI выполняет в пуле потоков.
Когда применять
FastAPI, ASGI. Пример использует синхронный SDK. Для async-клиента выбирайте async def + await. Выделение потока не отменяет тайм-ауты; CPU-тяжёлые задачи требуют отдельного рассмотрения.
Кто что делает
Человек
Задаёт время ответа и предел нагрузки на внешний сервис.
AI-агент
Проверяет тип SDK, выбирает обработчик и проводит тест параллельных запросов.
Пример применения
Внешний SDK отчётов поддерживает только синхронный вызов. Endpoint реализован через def, SDK имеет ограничение времени; тяжёлая генерация вынесена в очередь.
Как проверить у себя
- Медленный SDK не блокирует все остальные запросы.
- Настроены тайм-аут и предел параллелизма.
Первоисточники
История изменений на GitHubДата проверки отражает содержательную сверку. Синхронизация сайта не обновляет её автоматически.