是跨进程共享的烧瓶缓存文件系统缓存



让我们假设我将烧瓶与文件系统缓存与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输出,然后再也没有。

最新更新