@KizhiFox

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

Простой пример, sleep() в теле эндпоинта FastAPI, три разных варианта.

Инициализация, везде одинаковая

import time
import asyncio
from fastapi import FastAPI

app = FastAPI()



1. Два разных запроса выполнятся асинхронно

@app.get('/')
def root():
    time.sleep(10)
    return {'message': 'Hello World'}


2. Будет ждать выполнения первого запроса, затем выполнит второй

@app.get('/')
async def root():
    time.sleep(10)
    return {'message': 'Hello World'}


3. Два разных запроса выполнятся асинхронно

@app.get('/')
async def root():
    await asyncio.sleep(10)
    return {'message': 'Hello World'}


Почему так работают примеры 2 и 3, мне ясно. Но почему в примере 1 два запроса выполняются асинхронно? Там нет async и используется блокирующий time.sleep(). Не понимаю.
  • Вопрос задан
  • 147 просмотров
Решения вопроса 1
Daemon23RUS
@Daemon23RUS
Note: You can mix def and async def in your path operation functions as much as you need and define each one using the best option for you. FastAPI will do the right thing with them.

Anyway, in any of the cases above, FastAPI will still work asynchronously and be extremely fast.

But by following the steps above, it will be able to do some performance optimizations.


Обычный вызов выполняется асинхронно, но если вы указываете асинхронную обработку, то и асинхронность лежит на вас, а у вас там sleep во 2м примере который возвращает промис с задержкой.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы