use*_*210 7 python flask python-3.x gunicorn
我正在使用Gunicorn和Flask(Pythonn 3.6)开展一项小型服务.下面的伪代码大致显示了我想要的行为.有很多序列化foo对象,我希望尽可能多地在内存中保存它们并在LRU基础上删除它们.
cache = Cache()
@app.route('/')
def foobar():
name = request.args['name']
foo = cache.get(name)
if foo is None:
foo = load_foo(name)
cache.add(foo)
return foo.bar()
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是我不知道如何在Gunicorn工作人员之间分享这个缓存.我正在使用有限的内存,不想持有重复的对象.某些对象会经常使用,有些可能永远不会使用,所以我认为把它们放在内存中真的很有意义.
这只是从另一个应用程序(都在同一台服务器上运行)接收请求的东西,我只是想将这些代码分开.首先,即使使用Gunicorn我也会走向完全错误的方向吗?
我不认为使用 Gunicorn 有什么问题,但可能没有必要考虑水平扩展,除非您即将将其投入生产。无论如何,我建议使用单独的服务作为缓存,而不是在 python 内存中使用一个服务。这样,每个工作人员都可以根据需要打开与缓存的连接。Redis是一个流行的选项,但您可能需要执行一些数据操作来存储数据,例如将数据存储为 JSON 字符串而不是 python 对象。Redis 可以通过配置充当 LRU 缓存: https: //redis.io/topics/lru-cache