![]() | 1 xyxc0673 2018-11-03 11:43:40 +08:00 via Android 可以先序列化了再存进 redis 里 |
![]() | 2 qq976739120 2018-11-03 11:45:40 +08:00 放到 settings 里去啊 |
3 lanqing OP @qq976739120 好像不行 |
![]() | 5 absente 2018-11-03 11:56:55 +08:00 为啥要用全局变量?直接序列化存储到合适的地方不就好了。python 有 zodb,erlang 有 ETS。 |
![]() | 6 absente 2018-11-03 11:57:36 +08:00 zodb 比 pickle 稍微好用一点点,也可以直接存内存 |
7 lolizeppelin 2018-11-03 11:59:34 +08:00 via Android 单例 惰性初始化 |
![]() | 8 metamask 2018-11-03 12:04:41 +08:00 @qq976739120 他应该是要读写,settings 满足不了写这个操作 你用 redis,可以先 json 进去,出来 loads 下就可以, 或者用 model 的形式,建一个 config model,然后用 key,value 形式来处理; |
![]() | 11 absente 2018-11-03 12:19:09 +08:00 @lanqing 我替你试了一下,zodb 也不能存 socket,当然这主要是 picke 本身没有协议支持的原因(硬要支持也不是不可以)。建议还是自己写一个 middleware,把存 socket 的部分分离出来 |
![]() | 12 absente 2018-11-03 12:20:58 +08:00 pyramid 有一个 non tread safe 的方案可以解决这个问题,django 具体没试过,就不乱发言了。 |
13 zxcvsh 2018-11-03 12:23:50 +08:00 via iPhone settings |
![]() | 14 Hopetree 2018-11-03 12:38:12 +08:00 放到数据库 |
15 jianmingforpc 2018-11-03 12:41:13 +08:00 via iPhone 放 socket 还要修改啊..那看你的 wsgi server 是什么模式的?我觉得单进程的应该放 setting 可以... |
16 JasperYanky 2018-11-03 12:41:54 +08:00 via iPhone django solo |
![]() | 17 tabris17 2018-11-03 13:05:16 +08:00 任意类型是不可能的。因为操作系统的句柄在不同系统甚至不同进程中都没有意义。可序列化的数据类型还差不多 |
![]() | 18 fzleee 2018-11-03 13:18:50 +08:00 单进程的话,试试 threadlocal? |
![]() | 19 spark 2018-11-03 13:27:55 +08:00 via iPhone 可以环境变量么 |
![]() | 20 iiduce 2018-11-03 13:45:17 +08:00 这种我就放数据库里。想放任意数据类型要用文件型数据库,我用的是 mongodb。 |
21 lolizeppelin 2018-11-03 14:32:14 +08:00 via Android 都说了用单例模式就行了 简单点的 Python 模块本身就是单例的 随便拿个专门模块来放这类变量就完了 |
![]() | 22 Gothack 2018-11-03 15:09:28 +08:00 via iPhone processor ? |
23 lihongjie0209 2018-11-03 15:25:57 +08:00 @fzleee 进程和线程变量有什么关系 |
![]() | 24 ayang23 2018-11-03 16:01:58 +08:00 简单的回答:不能。 服务器上跑 Django 一般都是多进程,维护一个可写的全局变量是不可能实现的,用 red is 吧。 |
25 xiaqi 2018-11-03 16:29:08 +08:00 via Android 只有我一个人觉得,他想把句柄存 redis 这种想法是不对嘛? 他遇到的真正问题应该是,python 在多进程里面获取到其他进程的句柄吧?如果是这样,把进程 id 存到 redis 里,然后其他进程 id 来获取进程句柄,这样不是 ok 嘛? |
27 lanqing OP 非常感谢,已经实现 @lolizeppelin |
28 xpresslink 2018-11-05 10:14:18 +08:00 @lolizeppelin python 的 web 应用都需要用 uwsgi 或 gunicorn 之类的多进程服务器,进程之间的全局变量实际上是相互隔离的。所有只能用 redis 或 django 的 cache 这种公共存储。 |
29 xpresslink 2018-11-05 10:21:24 +08:00 最省事是用 Django 的缓存 CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', 'LOCATION': 'global-variables' } } >>> from django.core.cache import cache >>> cache.set('my_key', 'hello, world!', 30) >>> cache.get('my_key') 'hello, world!' |
30 lanqing OP @xpresslink 试过了,这样的保存不了 socket 对象哦,只能保存一些 dict list 之类的 |
31 yuoboo 2018-11-08 13:00:08 +08:00 via Android 为什么没有人说存到 session 中呢,那我说一个 session, 或者 cookie |