2014-01-06 81 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標誌,表示沒有緩衝區來查看流式傳輸)。這樣做確實按預期工作。