让我们假设我将烧瓶与文件系统缓存与UWSGI或GUNICORN结合使用,它们都会启动多个过程或工人。所有这些过程是否共享相同的缓存?或以不同的方式询问,无论过程PID,线程状态等如何?
例如,考虑以下最小示例:
import time
from flask import Flask, jsonify
from flask_caching import Cache
app = Flask(__name__)
cache = Cache(app, config={
'CACHE_TYPE': 'filesystem',
'CACHE_DIR': 'my_cache_directory',
'CACHE_DEFAULT_TIMEOUT': 3600,
})
@cache.memoize()
def compute(param):
time.sleep(5)
return param + 1
@app.route('/')
@app.route('/<int:param>')
def main(param=41):
expensive = compute(param)
return jsonify({"Hello expensive": expensive})
if __name__ == '__main__':
app.run()
Will www.example.com/41 仅需一次5秒即可(3600秒),无论UWSGI还是Gunicorn工人,都可以立即使用?
如果我在计算机上本地运行它,则缓存在不同的过程中稳定,甚至整个服务器的不同重新启动。
我发现烧瓶式文件系统缓存是由工作人员保持的。简单的例子我只是在我的应用程序(4个工人)中尝试过:
@app.route("/product/<id>", methods=["GET"])
@app.cache.cached()
def product(id):
product = Product.from_id(id)
app.pp.pprint(product.get_data())
我正在重新加载调用该视图的页面,并且我在控制台中看到了4次PPRINT输出,然后再也没有。