V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
liuxurong
V2EX  ›  Python

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

  •  
  •   liuxurong · 2013-01-16 10:28:41 +08:00 · 7368 次点击
    这是一个创建于 4327 天前的主题,其中的信息可能已经有所发展或是发生改变。
    把我自己的小站由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 了

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

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

    webbench -c 100 -t 30

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


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


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

    用相同的uwsgi和phpcgi,比较一下,哈哈,最好能贴个图上来。:)
    yxlwfds
        16
    yxlwfds  
       2013-03-02 19:48:59 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1143 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 18:32 · PVG 02:32 · LAX 10:32 · JFK 13:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.