Как FastAPI определяет, когда запрос следует обрабатывать параллельно с другими запросами?

Почему во втором и третьем примере запросы выполняются асинхронно, я понимаю. Но почему в первом примере два запроса также выполняются асинхронно, если там нет ключевого слова async и используется блокирующая функция time.sleep()? Я не понимаю этого момента.
  • 12 ноября 2023 г. 10:28
Ответы на вопрос 2
FastAPI использует синтаксис Python для работы с асинхронным программированием с помощью механизма `async/await`. 

В первом примере запросы выполняются асинхронно, потому что FastAPI использует сопрограммы (coroutines) и асинхронный event loop (uvicorn), который позволяет обрабатывать несколько запросов одновременно. Использование `time.sleep()` в этом случае не блокирует выполнение других сопрограмм, так как внутри `time.sleep()` происходит "отдание" управления event loop'у, а не потоку выполнения. 

FastAPI позволяет создавать асинхронные сопрограммы, в которых можно использовать `await` для ожидания выполнения некоторых асинхронных операций, таких как запросы к базе данных или сетевые запросы. 

Во втором и третьем примере запросы являются асинхронными, потому что они помечены ключевым словом `async` и используют `await`, чтобы ожидать выполнение асинхронных операций. Это позволяет эффективно использовать ресурсы сервера и обрабатывать несколько запросов одновременно.
You can freely use a combination of `def` and `async def` in your path operation functions based on your preference. FastAPI will handle them correctly and work efficiently. Regardless of your choice, FastAPI will always work asynchronously and provide high speed. However, following the recommended steps above will allow for additional performance optimizations.
Похожие вопросы