Короткий ответ
FastAPI поддерживает асинхронную обработку запросов через ключевые слова async и await. Эндпоинт, объявленный как async def, становится корутиной, которую можно приостанавливать, освобождая ресурсы для других задач, а обычные def-эндпоинты FastAPI выполняет в пуле потоков.
Как это работает подробнее
Асинхронность позволяет конкурентно обрабатывать запросы и эффективнее использовать ресурсы.
- Корутины. async def превращает функцию пути в корутину, которую можно приостанавливать и возобновлять.
- Переключение задач. При вызове await выполнение возвращается циклу событий, и время ожидания сети или диска используется для других запросов.
- Масштабирование. Неблокирующий ввод-вывод позволяет обслуживать больше запросов меньшим числом ресурсов.
- Простота. Асинхронный код избавляет от ада колбэков и сложностей многопоточности.
- Синхронные эндпоинты. Быстрые def-функции FastAPI запускает в пуле потоков, не блокируя цикл событий.
Пример кода
Простейший асинхронный эндпоинт
from fastapi import FastAPI
app = FastAPI()
@app.get('/')
async def read_root():
return {'Hello': 'World'}Что использовать на практике
- Типичные сценарии. Применяй async в сервисах с множеством одновременных подключений, внешними API и базами данных.
- Выбор по задаче. Для обычных быстрых эндпоинтов оставляй синхронные def-функции.
- Асинхронные зависимости. Внутри корутин используй await для операций ввода-вывода, поддерживающих async.
Подводные камни
- Блокирующие вызовы. Синхронная работа с базой или сетью внутри async def блокирует цикл событий и убивает выигрыш.
- Слепой async. Асинхронность не ускоряет CPU-нагрузку и простые эндпоинты, но добавляет сложность коду.
- Общее состояние. При конкурентной обработке следи за общими изменяемыми данными, чтобы не поймать гонки.
Как отвечать на собеседовании
- Начать с того, что FastAPI поддерживает async def и await → объяснить, что await возвращает управление циклу событий → показать простой асинхронный эндпоинт → добавить, что синхронные def-эндпоинты уходят в пул потоков → назвать сценарии максимальной выгоды: много подключений, внешние API, базы данных.