Python 烧瓶缓存文件系统缓存是否跨进程共享?

Python 烧瓶缓存文件系统缓存是否跨进程共享?,python,caching,flask,gunicorn,uwsgi,Python,Caching,Flask,Gunicorn,Uwsgi,假设我将Flask与文件系统缓存结合使用,并与uWSGI或gunicorn一起使用,它们中的任何一个都可以启动多个进程或工作进程。所有这些进程是否共享同一个缓存?或者以不同的方式询问,不管进程pid、线程状态等如何,函数和参数是否总是对同一缓存键求值 例如,考虑下面的最小例子: import time from flask import Flask, jsonify from flask_caching import Cache app = Flask(__name__) cache =

假设我将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()
导入时间
从烧瓶导入烧瓶,jsonify
从缓存导入缓存
app=烧瓶(名称)
缓存=缓存(应用程序,配置={
“缓存类型”:“文件系统”,
'缓存目录':'我的缓存目录',
“缓存默认超时”:3600,
})
@cache.memoize()
def计算(参数):
时间。睡眠(5)
返回参数+1
@应用程序路径(“/”)
@应用程序路径(“/”)
def主(参数=41):
昂贵=计算(参数)
返回jsonify({“Hello昂贵”:昂贵})
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
app.run()

www.example.com/41是否只需5秒一次,然后(3600秒)立即可用,无论uWSGI或gunicorn工人如何

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

我发现flask缓存文件系统缓存是按每个工作进程保留的。我刚刚在我的应用程序中尝试了一个简单的例子(4个工人):

@app.route(“/product/”,方法=[“GET”])
@app.cache.cached()
def产品(id):
product=产品。来自\u id(id)
app.pp.pprint(product.get_data())
我正在重新加载调用该视图的页面,我在控制台中看到了4次pprint输出,之后就再也看不到了

@app.route("/product/<id>", methods=["GET"])
@app.cache.cached()
def product(id):
    product = Product.from_id(id)
    app.pp.pprint(product.get_data())