用 webbench 测试了一下, 为什么Flask 比 PHP 慢那么多?

2013-01-16 10:28:41 +08:00
 liuxurong
把我自己的小站由PHP写的换成Flask了。Flask跑在Gunicorn上,PHP跑在fastcgi上,前面都是Nginx

但是用webbench测试了一下
PHP: Speed=10754 pages/min, 3539405 bytes/sec.
Flask: Speed=1238 pages/min, 380358 bytes/sec.

除了用 Flask 就是用了 pymysql 了

有什么办法呢?
7204 次点击
所在节点    Python
16 条回复
twm
2013-01-16 10:29:58 +08:00
换回php吧
liuxurong
2013-01-16 10:31:02 +08:00
@twm 觉得Python的语法简洁,而且flask也很简便,不想回去了
phuslu
2013-01-16 10:34:19 +08:00
安装 gevent, 然后 Gunicorn 的 gevent worker 来跑 flask 试下.
ratazzi
2013-01-16 10:46:20 +08:00
pymsql 是纯 python 的,这就慢了一节了,多跑几个 workers 试下
muxi
2013-01-16 10:52:37 +08:00
这个有点低,差个数量级啊,Flask不至于慢成这样,自己找找原因吧
之前用tornado写一个CMS基本上是PHP的3倍的QPS
Js
2013-01-16 10:52:43 +08:00
pymysql极端情况下要比mysqldb慢几十倍,而php的mysql要比python的mysqldb稍微快一点

不需要异步就用mysqldb, 要异步gevent+ pymysql(Cython之, 有个文件raise异常的地方需要改一下), gevent+umysql, eventlet+mysqldb(eventlet.db_pool)
liuxurong
2013-01-16 10:55:23 +08:00
@phuslu

webbench -c 100 -t 30

然后就500错误了..
phuslu
2013-01-16 11:05:04 +08:00
@liuxurong 看下 gunicorn log 呢?
gonbo
2013-01-16 11:20:12 +08:00
@liuxurong gevent patch all
liuxurong
2013-01-16 11:43:20 +08:00
换了MySQLdb 然后 worker 换了 Gevent 有一点进步,但效果还是不够好啊。


Speed=1898 pages/min, 655995 bytes/sec.


@gonbo
@phuslu
@Js
@muxi
@ratazzi
luckyduck
2013-01-16 11:48:57 +08:00
flask 和 fastcgi 的进程各是多少?
liuxurong
2013-01-16 11:49:39 +08:00
@luckyduck 都是一样
Js
2013-01-16 11:57:05 +08:00
@liuxurong mysqldb会堵塞掉整个gevent, 这样gevent的优势就不明显了,所以我上面没写gevent+mysqldb, 试换成umysql或者Cython编译过的pymysql. 另外最好能把测试代码贴一下
ratazzi
2013-01-16 12:47:10 +08:00
上了 gevent 而且用了 sqlalchemy 的话,用这个 https://github.com/hongqn/umysqldb
openroc
2013-01-16 14:13:43 +08:00
nginx + uwsgi + flask + mysql

用相同的uwsgi和phpcgi,比较一下,哈哈,最好能贴个图上来。:)
yxlwfds
2013-03-02 19:48:59 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/57741

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX