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

时间:2019-02-24 11:33:36

标签: 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 = 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或枪杀工人如何?

2 个答案:

答案 0 :(得分:0)

如果我在计算机上本地运行,则缓存在不同进程之间以及整个服务器的不同重启过程中都是稳定的。

答案 1 :(得分:0)

我发现烧瓶缓存文件系统缓存按工作人员保留。我刚刚在我的应用程序中尝试过的简单示例(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输出,之后再没有看到。