我有一个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()
答案 0 :(得分:0)
问题似乎是浏览器。当我使用Google Chrome测试时,我得到了问题中描述的行为:第二个线程在第一个线程完成之前没有启动。
测试:
wget -qO- http://localhost:5002/wait
我遇到了正确的回答。每个控制台立即显示输出。