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

time.sleep внутри корутины

Вопрос

В обработчике FastAPI (async def) вызывают time.sleep(5) или requests.get(...). Что происходит с другими запросами в этом процессе?

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

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

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

Коротко

Правильный ответ: Ждут: блокирующий вызов останавливает весь цикл событий. Цикл событий один, и пока корутина синхронно спит или ждёт сокет через requests, он не может переключиться на другие задачи.

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

  1. Обрабатываются параллельно, asyncio сам вынесет вызов в поток
  2. Ждут: блокирующий вызов останавливает весь цикл событийправильный ответ
  3. Получают ошибку 503
  4. Ничего не меняется, time.sleep в корутине автоматически становится асинхронным

Разбор

Цикл событий один, и пока корутина синхронно спит или ждёт сокет через requests, он не может переключиться на другие задачи. Все запросы процесса встают. asyncio ничего не выносит в поток сам. Решения: асинхронные аналоги (asyncio.sleep, httpx.AsyncClient), await asyncio.to_thread(...) для синхронного кода, или обычный def-обработчик, который FastAPI сам выполнит в пуле потоков.

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

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