Выбор ответа Middle FastAPI и Pydantic спрашивают часто обновлено
Как FastAPI выполняет обычный def
Вопрос
Как FastAPI выполняет обработчик, объявленный через обычный def, а не async def?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: В пуле потоков, чтобы синхронный код не блокировал цикл. Для def-обработчиков и def-зависимостей FastAPI (через Starlette и anyio) вызывает функцию в пуле потоков.
Варианты ответа
- Прямо в цикле событий, блокируя его на время выполнения
- В отдельном процессе из пула
ProcessPoolExecutor - Отказывается запускать: FastAPI требует
async def - В пуле потоков, чтобы синхронный код не блокировал циклправильный ответ
Разбор
Для def-обработчиков и def-зависимостей FastAPI (через Starlette и anyio) вызывает функцию в пуле потоков. Поэтому синхронный драйвер БД или requests в def безопасен, хотя число одновременно выполняемых обработчиков ограничено пулом. В async def те же вызовы заблокируют цикл. Отдельных процессов FastAPI не создаёт.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «FastAPI и Pydantic»
- Откуда в FastAPI ответ 422
- Annotated в параметрах FastAPI
- BackgroundTasks или очередь задач
- httpx.AsyncClient на каждый запрос
- Разбор и проверка query-параметров
- Граф зависимостей с кешем на запрос
- Подмена зависимостей в тестах
- Сколько раз вызывается зависимость