我正在尝试提供Flask应用,并希望在特定时间窗口(例如每天上午9点)重新加载pickle文件。我试图用时间计数器将一个while循环放入我的烧瓶应用程序的末尾,但这最终会挂起我的应用程序。目前设置是......
# 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)
我假设这里的目标是做我称之为“穷人的缓存”。理想情况下,您可以选择使用pymemcache和Flask的缓存工具,但下面的代码片段可以实现您想要的效果。如果你想每次重新加载泡菜,你可以重构这个;有点会打败我的想法。
另外,请注意我使用了一段时间来返回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)
快乐的编码!
答案 1 :(得分:0)
您想在特定时间点重新加载数据,然后您有两个选项: