gpt4 book ai didi

mongodb - 为什么 MongoDB 的 python motor 客户端在用 starlette 运行时比 pymongo 慢很多?

转载 作者:行者123 更新时间:2023-12-04 13:16:08 28 4
gpt4 key购买 nike

我有一个用 python 和异步框架 Starlette ( https://www.starlette.io/ ) 编写的 web 应用程序,我需要连接到 MongoDB,所以我安装了异步 pymongo 驱动程序:motor (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_clientawait ,结果大约是“1500 个请求/秒”
  • 如果我把它改成 pymongo_client (同步模式),结果大约是“1900 个请求/秒”

  • 电机的异步模式不应该比 pymongo 的同步模式更快吗?
    我想知道为什么与 pymongo(同步,1900 req/s)相比,使用电机(异步,1500 req/s)时的性能要差得多?

    其他信息:我使用 gunicorn -w 4 -k uvicorn.workers.UvicornWorker myblog:app 运行我的 starlette 应用程序,只需切换这两行即可执行 wrk基准。

    我进行了搜索,但找不到有关此内容的帖子,所以我想知道我是否遗漏了什么?任何帮助将不胜感激,谢谢。

    最佳答案

    也许问题是由于电机实际上不是异步驱动器。它只是在 ThreadPoolExecutor 中启动同步 pymongo,因此性能下降。不幸的是,目前在 python 上没有用于 mongo 的异步驱动程序 :(

    关于mongodb - 为什么 MongoDB 的 python motor 客户端在用 starlette 运行时比 pymongo 慢很多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60346668/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com