12

我遵循了Flask-Cache 的教程并尝试自己实现它。给定以下示例,为什么 Flask 不缓存时间?

from flask import Flask
import time

app = Flask(__name__)
cache = Cache(config={'CACHE_TYPE': 'simple'})
cache.init_app(app)

@app.route('/time')
@cache.cached(timeout=50, key_prefix='test')
def test():
   return time.ctime()

输出始终是当前时间。

似乎每个请求都会重新创建缓存。我究竟做错了什么?

编辑:我使用 Python 2.7.6 执行以下 python 文件:

def runserver():
    port = int(os.environ.get('PORT', 5000))
    Triangle(app)
    app.run(host='0.0.0.0', port=port, processes=5)


if __name__ == '__main__':
    runserver()
4

1 回答 1

23

您正在使用SimpleCache设置:

cache = Cache(config={'CACHE_TYPE': 'simple'})

这使用单个全局字典来保存缓存,而这反过来仅在您使用使用一个 Python 解释器来服务所有 WSGI 请求的 WSGI 服务器时才有效。如果您使用使用单独的子进程来处理请求的 WSGI 服务器,您将每次都获得该字典的新副本,并且不会有效地缓存任何内容。

使用内置app.run()开发服务器运行时,代码可以正常工作,因为您不使用该processes参数。

您的更新显示您使用5 个单独的进程运行服务器。每个进程都会得到自己的字典,并且它们之间不共享缓存。改用不同的缓存后端,例如filesystem

cache = Cache(config={'CACHE_TYPE': 'filesystem', 'CACHE_DIR': '/tmp'})
于 2015-10-06T17:13:10.317 回答