Flask缓存文件系统缓存是否在多个进程之间共享?

6

假设我使用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 是否不受 uWSGI 或者 gunicorn workers 影响,在接下来的 3600 秒内都能立即访问?

2个回答

2

如果我在本地机器上运行它,缓存就稳定存在于不同的进程以及整个服务器的重新启动之间。

翻译后结果:

如果您在本地计算机上运行它,则即使在不同的进程甚至整个服务器重新启动时,缓存也会保持稳定。


2
我发现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())

我正在重新加载调用该视图的页面,我在控制台中看到pprint输出4次,然后再也没有了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接