2015-09-06 308 views
-1

我正在使用python燒瓶建立一個站點。當它混淆了我,我在這裏展示我的處境不佳:在燒瓶中完成異步響應

... 
@app.route('/wanted_delay_response') 
def delay_response(): 
    def background_work(): 
     # I want to check some flags in the background 
     # this should not block, but it does as I try below 
     pass 
    gevent.spawn(background_work) 
    # the most confusing part comes: 
    return 'This is not what I really want to response' 

如上圖所示,後臺工作將繼續在後臺運行,但結果我想應該是來自它。

但是,我不知道如何通知服務器處理其他請求,當後臺工作正在運行,但有任何結果。

還是有沒有優雅的擱置當前請求,並且在後臺工作完成後回來響應,在間隔內,服務器可以處理其他請求嗎?

回答

0

客戶端和服務器之間的HTTP請求是短暫的,因此不適合您描述的用例。在數據準備就緒的情況下,服務器向客戶端發送數據時,請使用服務器推送技術。例如,您可以使用Websockets來實現客戶端和服務器之間的連接。

但是websockets並不容易管理,因爲連接長時間處於打開狀態。 Flask有一些擴展,可以簡化websocket的使用。例如檢查https://github.com/kennethreitz/flask-sockets

+0

謝謝你提供這樣一個很好的解決方案。對於我來說,HTTP請求只是在短時間內存在,這是真的可以接受的。 Websockets模塊對我來說顯示出很大的優勢,不僅適用於我遇到的當前情況,而且適用於合併服務器的其他部分。 – xete