django 中如何维护一个全局变量

2018-11-03 11:37:30 +08:00
 lanqing
我想在 django 中的任何一个地方都可以访问这个变量(比如这个变量是一个 list),我能够任意添加和删除变量中的元素,我原本想保存到 redis 中,但是我发现 redis 中好像只能存储字符串类型的,我想保存任意类型的对象到这个变量中,有什么办法么,不吝赐教,非常感谢!
6980 次点击
所在节点    Python
32 条回复
xyxc0673
2018-11-03 11:43:40 +08:00
可以先序列化了再存进 redis 里
qq976739120
2018-11-03 11:45:40 +08:00
放到 settings 里去啊
lanqing
2018-11-03 11:50:57 +08:00
@qq976739120 好像不行
lanqing
2018-11-03 11:51:08 +08:00
@xyxc0673 用 pickle 可以序列化所有对象么
absente
2018-11-03 11:56:55 +08:00
为啥要用全局变量?直接序列化存储到合适的地方不就好了。python 有 zodb,erlang 有 ETS。
absente
2018-11-03 11:57:36 +08:00
zodb 比 pickle 稍微好用一点点,也可以直接存内存
lolizeppelin
2018-11-03 11:59:34 +08:00
单例 惰性初始化
freakxx
2018-11-03 12:04:41 +08:00
@qq976739120
他应该是要读写,settings 满足不了写这个操作


你用 redis,可以先 json 进去,出来 loads 下就可以,
或者用 model 的形式,建一个 config model,然后用 key,value 形式来处理;
lanqing
2018-11-03 12:13:05 +08:00
@freakxx 我想存储的是 socket 对象,json 序列化好像不可以的
lanqing
2018-11-03 12:13:24 +08:00
@absente 好的!我会看看这个东西,以前没看到过,谢谢
absente
2018-11-03 12:19:09 +08:00
@lanqing 我替你试了一下,zodb 也不能存 socket,当然这主要是 picke 本身没有协议支持的原因(硬要支持也不是不可以)。建议还是自己写一个 middleware,把存 socket 的部分分离出来
absente
2018-11-03 12:20:58 +08:00
pyramid 有一个 non tread safe 的方案可以解决这个问题,django 具体没试过,就不乱发言了。
zxcvsh
2018-11-03 12:23:50 +08:00
settings
Hopetree
2018-11-03 12:38:12 +08:00
放到数据库
jianmingforpc
2018-11-03 12:41:13 +08:00
放 socket 还要修改啊..那看你的 wsgi server 是什么模式的?我觉得单进程的应该放 setting 可以...
JasperYanky
2018-11-03 12:41:54 +08:00
django solo
tabris17
2018-11-03 13:05:16 +08:00
任意类型是不可能的。因为操作系统的句柄在不同系统甚至不同进程中都没有意义。可序列化的数据类型还差不多
fzleee
2018-11-03 13:18:50 +08:00
单进程的话,试试 threadlocal?
spark
2018-11-03 13:27:55 +08:00
可以环境变量么
iiduce
2018-11-03 13:45:17 +08:00
这种我就放数据库里。想放任意数据类型要用文件型数据库,我用的是 mongodb。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/504042

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX