Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.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 使用Flask Cache缓存非视图函数的结果_Python_Caching_Flask_Flask Cache - Fatal编程技术网

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

Python 使用Flask Cache缓存非视图函数的结果,python,caching,flask,flask-cache,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 statis

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

我认为您需要在
简单方法中返回一些东西,以便Flask cache缓存返回值。我怀疑它是否能够自行确定要缓存方法中的哪个变量

另一件事是,您需要一个单独的函数来计算和缓存结果,如下所示:

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

如果您想缓存该方法,请使用

谢谢@user1537085的回答,它返回了一个值,但仍然没有cachingDid。您能让它工作吗?我认为这解决了你的问题(但不是我的)-