我想保存一个昂贵的功能的对象.昂贵的功能只应在任何请求之前处理一次.
我检查了Flask的文档并考虑g了保存结果和@app.before_first_request装饰器来定义这个任务只发生一次.
我的代码是这样的:
@app.before_first_request
def before_first_request():
g.rec = take_long_time_to_do()
@app.route('/test/')
def test():
return render_template('index.html',var_rec=g.rec)
Run Code Online (Sandbox Code Playgroud)
但是,这些代码不能很好地工作.它仅在第一次test调用请求时起作用.当我第二次访问"myapplication/test"时,g.rec它不存在,这将引发异常
有没有人有关于如何g在启动应用程序时分配全局变量的想法?
g是仅该请求的全局对象.您是否考虑过使用缓存机制?
> pip search flask | grep "cache" | sort
Flask-Cache - Adds cache support to your Flask application
Flask-Cache-PyLibMC - PyLibMC cache for Flask-Cache, supports multiple operations
Flask-Memsessions - A simple extension to drop in memcached session support for Flask.
Run Code Online (Sandbox Code Playgroud)
然后你可以存储take_long_time_to_do()那里的结果并检索它是否存在.