Выбор ответа Middle FastAPI и Pydantic спрашивают часто обновлено

Как FastAPI выполняет обычный def

Вопрос

Как FastAPI выполняет обработчик, объявленный через обычный def, а не async def?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: В пуле потоков, чтобы синхронный код не блокировал цикл. Для def-обработчиков и def-зависимостей FastAPI (через Starlette и anyio) вызывает функцию в пуле потоков.

Варианты ответа

  1. Прямо в цикле событий, блокируя его на время выполнения
  2. В отдельном процессе из пула ProcessPoolExecutor
  3. Отказывается запускать: FastAPI требует async def
  4. В пуле потоков, чтобы синхронный код не блокировал циклправильный ответ

Разбор

Для def-обработчиков и def-зависимостей FastAPI (через Starlette и anyio) вызывает функцию в пуле потоков. Поэтому синхронный драйвер БД или requests в def безопасен, хотя число одновременно выполняемых обработчиков ограничено пулом. В async def те же вызовы заблокируют цикл. Отдельных процессов FastAPI не создаёт.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.