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
rffan
V2EX  ›  Python

Flask 内建的 http 服务器不耐艹,怎么办,每三次出现一次 IOError 然后 broken pip 了。。

  •  1
     
  •   rffan ·
    rffanlab · 2017-01-28 08:38:09 +08:00 · 4447 次点击
    这是一个创建于 2856 天前的主题,其中的信息可能已经有所发展或是发生改变。
    Flask 内建的 http 服务器不耐艹,怎么办,每三次出现一次 IOError 然后 broken pip 了。。然后我换用了 uwsgi 跑 flask 也是酱紫,目前还在用 Flask 开发,有大神门知道这是啥缘故?怎么解决?
    服务器完全没问题:自己家的笔记本,就放这么一个 Flask 测试,而且跑的还是 CentOS 7 。
    前端用 Nginx 饭袋的。
    16 条回复    2017-02-06 15:24:02 +08:00
    linbiaye
        1
    linbiaye  
       2017-01-28 08:48:19 +08:00
    这是对方异常关闭连接导致的。
    rffan
        2
    rffan  
    OP
       2017-01-28 08:49:31 +08:00
    @linbiaye 知道,因为超时了。超时才会产生异常关闭连接。。。 TMD 关键是为何跑 2-3 次, Flask 就会出现这种超时的现象。
    linbiaye
        3
    linbiaye  
       2017-01-28 08:52:28 +08:00
    那是要你自己找为啥你的应用会超时。或者把 ng 超时时间设长些。
    rffan
        4
    rffan  
    OP
       2017-01-28 08:54:35 +08:00
    @linbiaye 一个普通的 sql 查询。前两次都是毫秒级的。后面就不行了。 NG 时间 300 秒了。不能再长了。。
    swulling
        5
    swulling  
       2017-01-28 09:17:39 +08:00 via iPhone
    改成多进程的,有参数配置
    rffan
        6
    rffan  
    OP
       2017-01-28 09:23:55 +08:00
    @swulling 已经是 threaded=true 了。开了多线程了。。多进程会比较好?
    wwqgtxx
        7
    wwqgtxx  
       2017-01-28 09:29:26 +08:00 via iPhone
    你要不自己写个小 test 程序反复调用你的 @route 方法,不经过 flask 调用,然后统计统计你自己的业务函数的执行速度是不是衰减严重,最后再去找 flask 的问题
    gouchaoer
        8
    gouchaoer  
       2017-01-28 09:34:46 +08:00 via Android
    @rffan py 的多线程是假多线程,可能有问题。。。弄成多进程的话,执行就和 php 方式类似了,不过 php 的 php-fpm 要成熟很多, gunicorn 之类的不好说
    rffan
        9
    rffan  
    OP
       2017-01-28 10:22:19 +08:00
    @wwqgtxx 换了 Python 版本解决了。。。之前用的是系统自带的 2.7.5 现在换成 2.7.13
    rffan
        10
    rffan  
    OP
       2017-01-28 10:23:00 +08:00
    @gouchaoer 假的?好蛋疼啊。。。
    pimin
        11
    pimin  
       2017-01-28 10:27:23 +08:00 via Android
    不都是用 WSGI 么?
    还是我理解错了?
    pimin
        12
    pimin  
       2017-01-28 10:32:48 +08:00 via Android
    好吧,看到 uuWSGI 也出问题了
    感觉 flask 本身的问题可能比较小, flask 毕竟还是有不少生产环境部署的。
    rffan
        13
    rffan  
    OP
       2017-01-28 10:47:31 +08:00
    @pimin 恩。所以我在怀疑。谷歌了有人说是没有清空缓冲区造成的。。 Python 社区有这个问题提了。而且已经关闭了。。于是想到了换版本。生产环境,我看了豆瓣的书。他们都是同时启用多后端,用 ip_hash 来反代,这样的效果就是多多多线程加多多多进程。基本上不会出现这种问题吧。
    fy
        14
    fy  
       2017-01-28 10:58:56 +08:00
    @rffan 多线程是真的,但字节码不能并行执行( GIL )。所以多线程只对 IO 等待有效,像爬虫这种程序不受影响, http 一半一半。一般来说建议多进程。
    yh7gdiaYW
        15
    yh7gdiaYW  
       2017-01-30 08:37:21 +08:00 via Android
    自带的是有这个毛病,我一直是用 gunicorn + gevent 跑,效果拔群
    yanzixuan
        16
    yanzixuan  
       2017-02-06 15:24:02 +08:00
    以前遇到过类似的,但是是 gunicorn 的版本不够新。更新后就再也没出现过。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1266 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 18:02 · PVG 02:02 · LAX 10:02 · JFK 13:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.