处于线程模式的Flask dev服务器仍在等待第一个线程完成

时间:2016-06-13 10:08:53

标签: python flask werkzeug

我有一个Flask视图,在生成响应以模拟Web服务的长请求时休眠。我正在使用threaded=True运行开发服务器。在浏览器中打开三个选项卡时,第二个选项卡在第一个线程完成之前不会显示任何更新。但是第三个标签 在第二个标签完成之前启动。我使用processes=4代替threaded=True进行了相同的操作。为什么其他线程似乎在等待第一个完成?

import sys
from flask import Flask, Response

PORT = 5002
SECONDS = 20

# create app
app = Flask(__name__)
app.config.from_object(__name__)

@app.route('/wait')
def wait():
    def generate():
        for i in range(SECONDS + 1):
            if i == 0:
                yield "<html><body>Getting data: <pre>"
            import time
            time.sleep(1)
            if i < SECONDS:
                print "tick"
                yield "."
            else:
                yield "Finished after %ss.</pre></body></html>" % SECONDS
    return Response(generate(), mimetype="text/html")

def runserver():
    app.run(host='0.0.0.0', port=PORT, threaded=True)

if __name__ == '__main__':
    runserver()

1 个答案:

答案 0 :(得分:0)

问题似乎是浏览器。当我使用Google Chrome测试时,我得到了问题中描述的行为:第二个线程在第一个线程完成之前没有启动。

测试:

wget -qO- http://localhost:5002/wait

我遇到了正确的回答。每个控制台立即显示输出。