我正在使用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()
我遇到的问题是我不知道如何在Gunicorn工作人员之间分享这个缓存。我在有限的记忆中工作,并且不想持有重复的物品。某些对象会经常使用,有些可能永远不会使用,所以我认为把它们放在记忆中真的很有意义。
这只是从另一个应用程序(都在同一台服务器上运行)接收请求的东西,我只是想将这些代码分开。我是否在第一时间使用了Gunicorn,走向了完全错误的方向?
答案 0 :(得分:0)
我没有看到使用Gunicorn有什么问题,但除非你接近将它投入生产,否则可能没有必要考虑横向扩展。无论如何,我建议使用单独的服务作为缓存,而不是在python内存中使用一个。这样,每个工作人员都可以根据需要打开与缓存的连接。 Redis是一种流行的选项,但您可能需要进行一些数据操作才能存储数据,例如将数据存储为JSON字符串而不是python对象。 Redis可以通过配置它来充当LRU缓存:https://redis.io/topics/lru-cache