【问题标题】:Reload pickle in Flask app在 Flask 应用程序中重新加载泡菜
【发布时间】:2017-07-03 15:07:02
【问题描述】:

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

【问题讨论】:

    标签: python flask


    【解决方案1】:

    我假设这里的目标是做我所说的“穷人的缓存”。理想情况下,您会选择使用类似 pymemcache 和 Flask 的缓存工具,但下面的 sn-p 将完成您想要的。如果你想每次都重新加载泡菜,你可以重构它;有点违背了我认为的目的。

    另外,请注意,我使用了一段时间来返回泡菜数据;上午 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)
    

    编码愉快!

    【讨论】:

    • 这是一个非常简洁的解决方案 :) 公平地说,我最终确实找到了这个 (stackoverflow.com/questions/13521798/…),再加上一个 cron 工作,更接近我想要的,因为我会无论如何都设置了一个cron作业来进行数据更新。不过,将来会记住这一点,非常感谢!
    【解决方案2】:

    您想在特定时间点重新加载数据,那么您有 2 个选项:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-11
      • 1970-01-01
      • 2012-08-16
      • 2022-01-04
      • 2012-03-19
      • 2013-04-27
      • 2016-11-26
      相关资源
      最近更新 更多