使用Flask-Cache缓存非视图函数的结果

时间:2015-10-08 15:30:21

标签: python caching flask flask-cache

我想使用Flask-Cache来缓存不是视图的函数的结果。但是,如果我装饰一个视图函数,它似乎才有用。 Flask-Cache可用于缓存"正常"功能

如果我装饰一个视图函数,缓存就可以工作。

cache = Cache(app,config={'CACHE_TYPE': 'simple'})

@app.route('/statistics/', methods=['GET'])
@cache.cached(timeout=500, key_prefix='stats')
def statistics():
    return render_template('global/application.html') # caching works here

如果我装饰一个"正常"它不起作用。从视图中调用它。

class Foo(object):
    @cache.cached(timeout=10, key_prefix='filters1')
    def simple_method(self):
        a = 1
        return a  # caching NOT working here  



@app.route('/statistics/filters/', methods=['GET'])
def statistics_filter():
    Foo().simple_method()

如果我对两个函数使用相同的key_prefix,它也可以工作。我认为这是一个线索,它自己的缓存正在被正确初始化,但我调用简单方法或定义它的方式是错误的。

1 个答案:

答案 0 :(得分:0)

我认为您需要在simple_method中为Flask-Cache返回一些内容来缓存返回值。我怀疑它只会找出你的方法中哪个变量自己缓存。

另一件事是你需要一个单独的函数来计算和缓存你的结果:

def simple_method(self):
    @cache.cached(timeout=10, key_prefix='filters1')
    def compute_a():
        return a = 1
    return compute_a()

如果要缓存该方法,请使用memoize