2014-01-06 46 views
4

我希望我的烧瓶应用程序能够同时处理多个调用。 我一直在使用threaded=Trueprocesses=3进行测试,下面的代码正在运行,但是当我向服务器发出两个调用时,以后总是必须等待第一个调用完成。 我知道建议将应用程序部署在更复杂的WSGI容器上,但现在我只想让我的小应用程序能够一次处理2个调用。螺纹烧瓶应用程序不按预期方式工作

from flask import Flask, Response, stream_with_context 
from time import sleep 
app = Flask(__name__) 

def text_gen(message): 
    for c in message: 
     yield c 
     sleep(1) 

@app.route("/") 
def hello(): 
    stream = text_gen('Hello World') 
    return Response(stream_with_context(stream)) 

if __name__ == "__main__": 
    app.run(host='0.0.0.0', port=8080, debug=True, threaded=True) 
+3

你的例子适合我。你如何验证一次只处理一个请求?两个标签在同一个浏览器中?这可能是浏览器持有多个请求到同一个域。 –

+0

'app.run()'启动一个开发服务器。这不意味着生产用途。 – Blender

+1

尝试在'text_gen'中的'yield'之后插入:'import threading;打印“在%s中努力工作”%threading.currentThread()。name' –

回答

4

@Lukas是对的。

我在Google Chrome中使用两个选项卡进行调试。显然Chrome试图通过使用两个标签相同的套接字来实现智能。启动Chrome时,Chrome的处理方式可以通过-socket-reuse-policy标志进行更改。

更简单的测试方法是在每个选项卡中使用不同的主机名或使用curl -N-N标志,表示没有缓冲区来查看流式传输)。这样做确实按预期工作。