Flask Caching 文件系统缓存是否跨进程共享?

Is the Flask Caching filesystem cache shared across processes?

让我们假设我将 Flask 与文件系统缓存结合使用,并结合 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()

www.example.com/41 是否只需要 5 秒一次然后(3600 秒)立即可用,而不管 uWSGI 或 gunicorn workers?

如果我 运行 它在我的本地机器上,缓存在不同的进程中是稳定的,甚至整个服务器的不同重启也是如此。

我发现 flask-caching 文件系统缓存是为每个工作人员保留的。我刚刚在我的应用程序中尝试过的简单示例(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 输出,之后就没有了。