2017-07-03 28 views
3

我試圖爲Flask應用程序提供服務,並希望在特定的時間窗口(例如每天9AM)重新加載泡菜文件。我試圖用時間計數器在我的燒瓶應用程序的末尾放置一個while循環,但是這最終會掛起我的應用程序。目前,設立在...Flask應用程序的重新加載泡菜

# main.wsgi 
from main import app as application 

# main.py 
data = pickle.load("/path/to/pickle.file") 
@app.route("/") 
def func(): 
    return render_template("base.html", data_to_serve = data) 
# Can I write something here to reload the data at specific time points? 

回答

0

您要重新加載的時間再具體點的數據,你有兩個選擇:

  1. 使用使用JavaScript和Ajax請求的客戶端大小做吧一些計時器。
  2. 使用網絡套接字。有一個名爲flask-socketio的燒瓶庫。有一個關於如何使用它的例子。
1

我假設這裏的目標是做我所說的「窮人的緩存」。理想情況下,您可以選擇使用pymemcache和Flask的緩存應用,但下面的代碼片段可以完成您想要的功能。如果你想每次重新加載pickle,你都可以重構這個;有點會挫敗我認爲的目的。

此外,請注意我已經使用了一段時間來返回pickle數據;上午9點到下午12點。你也可以做一些事情,如now.time() == time(hour=9)來完成你想要的。

import pickle 

from datetime import datetime, time 


cached_data = pickle.load("/path/to/pickle.file") 
START_TIME = time(hour=9) 
END_TIME = time(hour=12) # Can also use something like timedelta 


def in_range(): 
    now = datetime.now() 
    if START_TIME <= now.time() <= END_TIME:   
     return True 
    return False 


app.route("/") 
def func(): 
    if in_range(): 
    return render_template("base.html", data_to_serve = cached_data) 

    # else do normal business 
    data = 'compute new data...' 
    return render_template("base.html", data_to_serve = data) 

快樂編碼!

+0

這是一個相當整潔的解決方案:)公平,我最終找到了這個結果(https://stackoverflow.com/questions/13521798/flask-mod-wsgi-automatic-reload-on-source-代碼更改),它與cron作業相結合,更接近我想要的,因爲無論如何,我都會設置一個cron作業來執行數據更新。爲了未來,請牢記這一點,非常感謝! – thestatnoob

相關問題