



























感谢各位大佬,用 redis 存了状态,基本实现了功能,上服务器也没问题了。
还有几点请教:
1 ,用 uwsgi 起多个 worker ,实际上是多个 django 的实例在跑,这样如果用 uwsgi 来启动 django ,djaongo 中是不存在只运行一次的代码。
我这个问题中,即使用 redis 也有个初始值的坑。最简单的是在程序之外,程序启动之前,用 redis-cli 手动设定初始值。如果不用这个方法,就想是不是能在 django 初始化的地方,运行一次 redis set 初始值。通过上面的分析,django 用 uwsgi 启动是不存在这样只执行一次的代码,至少每个 worker 启动 django 所有的代码都要跑一遍,有几个 worker 就要跑几遍。
后来我想通过 redis 直接 get 键取值,但是 redis 的 get 不像 json 的 get 读取空时能返回一个默认值,这个真没想到,自己简单包装了一个能返回默认值的,来代替原始的 conn.get()。这样就不需要预先设置 redis 了。
conn = redis.Redis(connection_pool=POOL)
IS_RELEASED_KEY = 'xxxx_is_released'
def rget(key):
ret = conn.get(key)
if ret == None:
return '0'
else:
return ret
2 ,取得 redis 的 conn 是在 view.py 中,但是不在任何一个 view 函数中,这个代码是不是每个 worker 只执行一次,有几个 woker 就有几个不同的 conn ,还是每次请求都会建新的 conn ?
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。