繁体   English   中英

在Flask应用中重新加载泡菜

[英]Reload pickle in Flask app

我正在尝试提供Flask应用程序,并希望在特定的时间窗口(例如每天9AM)重新加载一个pickle文件。 我试图用一个时间计数器将一个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?

我假设这里的目标是做我所谓的“穷人的缓存”。 理想情况下,您将选择使用pymemcache和Flask的缓存实用程序之类的东西,但是下面的代码片段将完成您想要的事情。 如果您想每次重新加载泡菜,都可以重构。 有点违反了我的想法。

另外,请注意,我花了一段时间返回泡菜数据。 上午9点至下午12点。 您也可以执行if 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. 从使用javascript的客户端大小和使用某些计时器的ajax请求开始。
  2. 使用网络套接字。 有一个用于烧瓶的库,称为flask-socketio 有一个有关如何使用它的示例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM