У меня есть веб-приложение, написанное с python и asyn c framework Starlette (https://www.starlette.io/), мне нужно подключиться к MongoDB, поэтому я установил asyn c pymon go драйвер: двигатель (https://motor.readthedocs.io/en/stable/) версия 2.1.0
И у меня есть некоторый псевдокод, подобный этому:
motor_client = motor.motor_asyncio.AsyncIOMotorClient(...)
pymongo_client = pymongo.MongoClient(...)
class BlogList(HTTPEndpoint):
async def get(self, request):
blog_list = [item async for item in motor_client.blog.find(condition)]
# blog_list = list(pymongo_client.blog.find(condition))
data = {
"request": request,
"blogs": blog_list,
}
return RenderPageResponse("index.html", data)
Для строки blog_list
здесь я сравнил его с wrk -t10 -d10 -c100 http://localhost:8080/blog
:
- Если я использую
motor_client
с await
, результат будет около "1500 запросов / сек c" - Если я изменю его на
pymongo_client
(режим syn c), результат будет примерно "1900 запросов / сек c"
Не должен асин c режим с двигателем быть быстрее режима syn c с pymon go? Мне интересно, почему производительность намного хуже при использовании двигателя (asyn c, 1500 req / s) по сравнению с pymon go (syn c, 1900 req / s)?
Другая информация: я запускаю свое приложение starlette с помощью gunicorn -w 4 -k uvicorn.workers.UvicornWorker myblog:app
и просто переключаю эти 2 строки для выполнения теста wrk
.
Я выполнил поиск, но не могу найти сообщения, говорящие об этом мне так интересно, я что-то пропустил? Спасибо за любую помощь, спасибо.