Выбор ответа Middle asyncio спрашивают часто обновлено
time.sleep внутри корутины
Вопрос
В обработчике FastAPI (async def) вызывают time.sleep(5) или requests.get(...). Что происходит с другими запросами в этом процессе?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Ждут: блокирующий вызов останавливает весь цикл событий. Цикл событий один, и пока корутина синхронно спит или ждёт сокет через requests, он не может переключиться на другие задачи.
Варианты ответа
- Обрабатываются параллельно, asyncio сам вынесет вызов в поток
- Ждут: блокирующий вызов останавливает весь цикл событийправильный ответ
- Получают ошибку 503
- Ничего не меняется,
time.sleepв корутине автоматически становится асинхронным
Разбор
Цикл событий один, и пока корутина синхронно спит или ждёт сокет через requests, он не может переключиться на другие задачи. Все запросы процесса встают. asyncio ничего не выносит в поток сам. Решения: асинхронные аналоги (asyncio.sleep, httpx.AsyncClient), await asyncio.to_thread(...) для синхронного кода, или обычный def-обработчик, который FastAPI сам выполнит в пуле потоков.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.