【问题标题】:Is the Flask Caching filesystem cache shared across processes?Flask Caching 文件系统缓存是否跨进程共享?
【发布时间】:2019-02-24 11:33:36
【问题描述】:

假设我将 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 工作者如何?

【问题讨论】:

    标签: python caching flask gunicorn uwsgi


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-23
        • 2021-05-04
        • 2011-10-30
        • 2012-12-11
        相关资源
        最近更新 更多