本地Flask服务器上的请求缓慢

刚开始在本地服务器上使用Flask,我注意到请求/响应时间比我感觉他们应该慢。

只是一个简单的服务器,如下所示需要接近5秒的响应。

from flask import Flask app = Flask(__name__) @app.route("/") def index(): return "index" if __name__ == "__main__": app.run() 

有任何想法吗? 或者这只是本地服务器是如何?

好的,我明白了。 这似乎是与Werkzeug和OS支持ipv6的问题。

从Werkzeug网站http://werkzeug.pocoo.org/docs/serving/

在支持ipv6的操作系统上进行configuration,如现代Linux系统,OS X 10.4或更高版本以及Windows Vista,如果访问本地服务器,某些浏览器可能会非常慢。 原因是有时“localhost”被configuration为在ipv4和ipv6 socktes上可用,一些浏览器将尝试首先访问ipv6,然后是ivp4。

所以解决的办法是从本地主机禁用ipv6,从我的主机文件中注释掉以下行:

 ::1 localhost 

一旦我这样做,延迟问题就会消失。

我真的在挖Flask,我很高兴这不是框架的问题。 我知道这不可能。

将“threaded = True”作为参数添加到app.run()中,如下所示: http ://arusahni.net/blog/2013/10/flask-multithreading.html

例如: app.run(host="0.0.0.0", port=8080, threaded=True)

ipv6禁用解决scheme不适合我,但是这样做。

来自@ sajid-siddiqi的解决scheme在技术上是正确的,但请记住, Werkzeug中的内置WSGI服务器(已打包到Flask以及它用于app.run() )。

安装一个WSGI服务器来处理multithreading行为。 我对WSGI服务器的各种性能做了一系列的研究。 您的需求可能会有所不同,但是如果您使用的是Flask ,那么我会推荐以下其中一个networking服务器。

对于Python 2.x:gevent

您可以使用命令pip install gevent通过pip install gevent 。 有关如何相应修改代码的说明,请访问: http : //flask.pocoo.org/docs/0.10/deploying/wsgi-standalone/#gevent

对于Python 3.x:meinheld

gevent是更好的,但它仍然没有更新使用python3 (请参阅此线程的更新: https : //github.com/gevent/gevent/issues/38 )。 从我看过的所有涉及真实世界testing的基准testing中, meinheld似乎是最直接,最简单的WSGI服务器。 (如果你不介意更多的configuration,你也可以看看uWSGI 。)

您也可以使用命令pip3 install meinheld通过pip3 install meinheld 。 从那里,看看meinheld提供的示例来集成Flask : https : //github.com/mopemope/meinheld/blob/master/example/flask_sample.py

*注:从我使用PyCharmfrom meinheld import server的行突出显示为一个错误,但服务器将运行,所以你可以忽略错误。

我不太有评论的声誉,所以我会加上这个“解决scheme”。 我的问题是通过“threaded = True”来解决的,但是我想给出一些背景来区分我的问题和其他可能不会这样做的问题。

  1. 我的问题只出现在python3上运行Flask。 切换到python2,我不再有这个问题。
  2. 我的问题只有在使用Chrome浏览器访问api时才会显现出来,此时,Chrome显示了预期的屏幕,但其他所有内容都已经挂起(curl,ffx等),直到我重新加载或closures了Chrome标签页,此时其他所有内容周围回来了一个结果。

我最好的猜测是Chrome试图保持会话打开,Flask阻止了后续的请求。 一旦从Chrome的连接被停止或重置,一切都被处理。

在我的情况下,线程修复它。 当然,我现在正在通过别人提供的一些链接来确保它不会引起任何其他问题。

localhost以外的其他主机上运行时出现此错误,因此对于某些不同的基础问题,可能会出现相同的症状。

我把我用过的大部分东西都转到了Tornado上,而且有趣的是, 我有一些缓慢的页面加载,但事情似乎一般更敏感。 另外,非常轶事,但我似乎注意到,单靠Flask会随着时间的推移而减速,但Flask + Tornado则不那么如此。 我想用Apache和mod_wsgi会让事情变得更好,但是Tornado的设置非常简单(参见http://flask.pocoo.org/docs/deploying/others/ )。

(另外,一个相关的问题: Flask app偶尔悬挂 )

我在这里有不同的解决scheme。 我刚从服务器的目录中删除了所有的.pyc文件,然后重新启动。 顺便说一句,localhost已经在我的主机文件(Windows 8)中注释掉了。

服务器一直冻结,现在再次正常工作。

threaded=True适用于我,但最后我发现这个问题是由于Firefox上的foxyproxy造成的。 由于当应用程序在本地主机上运行时,如果发生响应速度慢

  • foxyproxy在Firefox上启用

如果缓慢的反应不会发生

  • foxyproxy在Firefox上禁用

  • 使用其他浏览器访问网站

我发现唯一的解决办法是禁用foxyproxy,试图添加localhost到代理黑名单和调整设置,但没有一个工作。