在Flask应用程序中重新加载泡菜

时间:2017-07-03 15:07:02

标签: python flask

我正在尝试提供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?

2 个答案:

答案 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)

您想在特定时间点重新加载数据,然后您有两个选项:

  1. 使用javascript和使用某些计时器的ajax请求从客户端大小执行此操作。
  2. 使用网络套接字。有一个名为flask-socketio的烧瓶库。有一个如何使用它的例子。