0

我有这个烧瓶缓存的小例子:

测试.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 装饰器的可能性。

4

0 回答 0