python的flask框架结合gevent性能反而大幅度下降?

发布于 2022-09-03 14:30:50 字数 230 浏览 24 评论 0

项目使用flask框架,是个较复杂的推荐系统,需要从设定的各类数据源取(有些复杂的排序、过滤)推荐数据,大部分数据存取使用redis,经过常规优化后取数据控制在200ms以内。
为进一步大幅度提升性能采用gevent作为并发框架,但是发现性能反而下降了大概25%,原来一个数据源就30ms,改造后上升到一两百毫秒都有,这是为什么?这种情况大家会怎么进一步调优了。
(使用场景除了比较集中的取数据模块,其他地方还有零星用到gevent)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

爱给你人给你 2022-09-10 14:30:50

这个问题有点复杂,建议题主将环境以及启动参数,运行的进程数量,以及如何运行的情况介绍一下。

在没有这些条件的情况下,我想以我自己的理解谈一下这个问题,这个问题原意题主是想借 gevent 提高性能,但是发现性能反而降低,那么这个时候需要考察一下性能在哪降低了。

题主衡量性能降低的标准是获取数据的时间变长了,这里我说一下个人的见解,首先,题主不知道了不了解 gevent 的工作方式,gevent 的作用一条线程跑多个协程,适合多 IO 操作,如果夹杂稍微多 CPU 操作的,时间上就不好把握了,例如题主这里,要求的是几十 ms 级别的,万一你哪一个协程跑个一两百ms 的 CPU 运算,那么即使你其他协程IO再快也无济于事。

而且,需要强调的是引入 gevent 不会加快获取数据的速度,例如,原来是 30ms,引入之后不会变少,只会变多,那么引入的好处是什么?原来你能在1秒之内接待33个客户端请求,引入之后可能可以接待100个/s,也可能接待 300个/s,这才是 gevent 的好处。

在不完全理解题主环境的情况下只能提这么多建议,如果题主没理解的话可以提供一下之前的说的信息进一步分析。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文