Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在烧瓶应用程序中重新加载泡菜_Python_Flask - Fatal编程技术网

Python 在烧瓶应用程序中重新加载泡菜

Python 在烧瓶应用程序中重新加载泡菜,python,flask,Python,Flask,我正在尝试为Flask应用程序提供服务,并希望在特定时间窗口(例如每天上午9点)重新加载pickle文件。我曾尝试在我的flask应用程序的末尾添加一个带有时间计数器的while循环,但最终挂起了我的应用程序。目前设置为 # main.wsgi from main import app as application # main.py data = pickle.load("/path/to/pickle.file") @app.route("/") def func(): retur

我正在尝试为Flask应用程序提供服务,并希望在特定时间窗口(例如每天上午9点)重新加载pickle文件。我曾尝试在我的flask应用程序的末尾添加一个带有时间计数器的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个选项:

  • 使用javascript和ajax请求,使用一些定时器,从客户端大小开始执行
  • 使用web套接字。有一个名为flask的库。有一个关于如何使用它的例子

  • 我假设这里的目标是做我所谓的“穷人的缓存”。理想情况下,您可以选择使用pymemcache和Flask的cache-utils之类的东西,但下面的代码片段将实现您想要的功能。如果每次都想重新加载pickle,可以重构它;我想这有点违背了目的

    另外,请注意,我使用了一段时间来返回pickle数据;上午九时至下午十二时。您还可以执行类似于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)
    
    导入pickle
    从日期时间导入日期时间,时间
    cached_data=pickle.load(“/path/to/pickle.file”)
    开始时间=时间(小时=9)
    END_TIME=TIME(hour=12)#也可以使用类似timedelta的东西
    def在_范围内():
    now=datetime.now()
    
    如果START_TIME这是一个非常简洁的解决方案:)公平地说,我最终确实找到了这个()加上cron作业,更接近我想要的,因为我无论如何都会设置cron作业来进行数据更新。不过,我会记住这一点,非常感谢!