2015-10-08 31 views
3

我想使用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,它也可以。我认为这是一个线索,缓存它自己正在被正确初始化,但我调用简单方法或定义它的方式是错误的。

+0

编辑我的问题,谢谢。 – WebQube

+2

它看起来像你正在使用'simple_method'作为更大的东西的一部分。你可以包括包装类,以及你如何调用它? (就像现在一样,你的例子不会运行,因为'self'不会传递给'simple_method')。 –

+0

编辑我的问题 – WebQube

回答

0

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

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

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

如果你希望缓存的方法,使用memoize

+0

感谢您的答案@ user1537085,返回一个值,但仍然没有缓存 – WebQube