2016-12-24 69 views
2

我正在學習燒瓶,並試圖在Heroku上創建小型網站。 在Heroku上部署時,我得到了超長任務的超時錯誤,並且可以通過超時增加進行傳遞。經過調查更多,我發現另一種解決方案是流水。這裏的文章關閉我的解決方案:https://librenepal.com/article/flask-and-heroku-timeout/ 但它不工作。錯誤30秒後 依然出現從文章:在heroku上的瓶子仍然流水30秒超時錯誤

from flask import Flask, Response 
import requests 

app = Flask(__name__) 

def some_long_calculation(number): 
    ''' 
    here will be some long calculation using this number 
    let's simulate that using sleep for now :) 
    ''' 
    import time 
    time.sleep(5) 

    return number 

@app.route('/') 
def check(): 
    def generate(): 
     for i in range(10): 
     yield "<br/>" # notice that we are yielding something as soon as possible 
     yield str(some_long_calculation(i)) 
    return Response(generate(), mimetype='text/html') 

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

你有關於這個問題的任何想法?

+0

也許這篇文章可能會有所幫助:http://stackoverflow.com/questions/18975851/how-to-make-flask-reponse-to-client-asynchronously – MrLeeh

+0

謝謝MrLeeh,我會檢查它 –

+0

但似乎解決方案是創建新任務並在後臺運行,而不是將數據流式傳輸到Web瀏覽器。 我正在尋找解決方案,以流數據,如更新進度,並可以通過Heroku的第二秒超時 –

回答

0

在Heroku的請求 - 響應循環中,您無法避開30秒的超時行爲。這是通過Heroku路由網格強制執行的。

如果你需要長時間運行的請求,這樣,你有幾種選擇:

  1. 投入大量數據到S3上或文件中的一些其他的文件存儲服務。當人們提出請求時,向他們發送文件URL,並讓他們在那裏下載它。 (這是最優的)
  2. 使用websockets。根據定義,Web套接字是永遠不會在瀏覽器和服務器之間關閉的永久TCP連接。對於需要連續回退和第四次通信的應用來說,這非常理想,就像您所描述的那樣。
+0

感謝rdegges的明確答案,並停止我搜索不存在的答案 –

相關問題