FastAPI - маршруты pymongo + sync, по-видимому, НАМНОГО быстрее, чем маршруты Motor + asyncPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 FastAPI - маршруты pymongo + sync, по-видимому, НАМНОГО быстрее, чем маршруты Motor + async

Сообщение Anonymous »

Я использую FastAPI + pymongo (маршруты синхронизации), и увидел, что Motor был рекомендован для «лучших практик» в FastAPI.
Я установил два маршрута с одним и тем же вызовом БД, один с использованием асинхронный маршрутизатор + двигатель, один использует sync + pymongo.
Асинхронный маршрут безумно медленный: в среднем требуется 27 секунд для ответа 300 пользователям (~ 60 запросов в секунду), поэтому я предполагаю, что Должно быть, я делаю здесь что-то не так. Пожалуйста, дайте мне знать, где я ошибаюсь! Маршрутизатор синхронизации pymongo работает очень быстро: время отклика для того же теста составляет 50 мс.

Код: Выделить всё

# db.py

client = AsyncIOMotorClient(
mongo_con_string,
)
sync_client = MongoClient(
mongo_con_string,
)

mongo_db = client["test"]
sync_mongo_db = sync_client["test"]

Код: Выделить всё

#views.py

@test_router.get("/test", status_code=200, response_description="")
async def get_articles():
collection = mongo_db[TEST_TABLE]
articles = await collection.find().to_list(1000)
articles_str = json.dumps(articles, default=str)

@test_router.get("/test-sync", status_code=200, response_description="")
def get_articles_sync():
collection = sync_mongo_db[TEST_TABLE]
articles = collection.find().to_list(1000)
articles_str = json.dumps(articles, default=str)

Я добавил рабочих в файл docker, добавил больше процессора/памяти, дополнительные задачи в ECS, но, похоже, ничего не работает. Разве это не проблема FastAPI и, возможно, самого моего экземпляра mongo? Когда я протестировал 300 пользователей на простой конечной точке /health, результаты были очень быстрыми.

Код: Выделить всё

# Dockerfile

FROM python:3.11

WORKDIR /code

COPY ./api/requirements.txt /code/requirements.txt

RUN pip install --upgrade -r /code/requirements.txt

COPY ./api/app /code/app
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80", "--proxy-headers", "--workers", "10"]

Я прочитал этот ответ вместе с документацией. Насколько я понимаю, пока мы ожидаем вызова БД, он позволит другим запросам поступать и начинать обработку по мере завершения. Но судя по моим тестам, похоже, что цикл событий просто полностью блокируется при каждом вызове.

Подробнее здесь: https://stackoverflow.com/questions/792 ... ync-routes
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Код Visual Studio, не видя pymongo «ModuleNotFoundError», установил pymongo с помощью pip. Почему он не видит пимонго?
    Anonymous » » в форуме Python
    0 Ответы
    45 Просмотры
    Последнее сообщение Anonymous
  • Рекомендации по подключению MongoDB с помощью Motor в FastAPI
    Anonymous » » в форуме Python
    0 Ответы
    46 Просмотры
    Последнее сообщение Anonymous
  • Можно ли использовать Async Async's Async's 2,0+ от Flask Wih Flask?
    Anonymous » » в форуме Python
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous
  • Std :: sync :: oncelock и oney_cell :: sync :: lazy не возвращайте тот же тип
    Anonymous » » в форуме MySql
    0 Ответы
    545 Просмотры
    Последнее сообщение Anonymous
  • Клиент PyMongo Async не вызывает исключение при сбое соединения
    Anonymous » » в форуме Python
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»