我有这个烧瓶缓存的小例子:
测试.py:
#!/usr/bin/env python
from flask import Flask
from flask_caching import Cache
import random
app = Flask(__name__)
config = {
"DEBUG": True, # some Flask specific configs
"CACHE_TYPE": "SimpleCache", # Flask-Caching related configs
"CACHE_DEFAULT_TIMEOUT": 300
}
app.config.from_mapping(config)
cache = Cache(app)
@cache.memoize(5)
def _add(a, b):
return a + b + random.randrange(0, 1000)
@app.route("/api/add/<int:a>/<int:b>")
def add(a, b):
return str(_add(a, b))
if __name__ == "__main__":
app.run(host='0.0.0.0', port=8000)
在一个文件中完美工作。现在,我想在外部库中输出 _add 函数。
这给了我:
./test2.py
./external/__init__.py
./external/example.py
测试2.py:
#!/usr/bin/env python
from flask import Flask, current_app
from flask_caching import Cache
from external import example
app = Flask(__name__)
config = {
"DEBUG": True, # some Flask specific configs
"CACHE_TYPE": "SimpleCache", # Flask-Caching related configs
"CACHE_DEFAULT_TIMEOUT": 300
}
app.config.from_mapping(config)
currect_app.cache = Cache(app)
@app.route("/api/add/<int:a>/<int:b>")
def add(a, b):
return str(example._add(a, b))
if __name__ == "__main__":
app.run(host='0.0.0.0', port=8000)
./external/example.py
import random
from flask import current_app
@current_app.cache.memoize(5)
def _add(a, b):
return a + b + random.randrange(0, 1000)
如何在 ./external/example.py 中使用 cache.memoize 装饰器?
我明白为什么会出现错误:RuntimeError:在应用程序上下文之外工作。
但我不知道如何解决这个问题。我有很多功能(需要使用外部库)并保留在所有外部库中使用 cache.memoize 装饰器的可能性。