将变量分配给`g`一次,仅在Flask中应用一次

Han*_*Sun 5 python flask web

我想保存一个昂贵的功能的对象.昂贵的功能只应在任何请求之前处理一次.

我检查了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在启动应用程序时分配全局变量的想法?

sbe*_*rry 5

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()那里的结果并检索它是否存在.