Python通过config.py共享变量修改后其他模块读取未更新问题咨询
原因分析
1. 最高发场景:两个模块运行在独立进程
Python的模块导入、变量存储都是进程隔离的,每个独立启动的进程会在自己专属的内存空间里初始化所有导入的模块,互不干扰:
- 运行模块1时,进程A加载
config.py,修改的是进程A内存中config对象的ceu、si属性 - 运行模块2时,启动的是全新的进程B,会重新加载一次
config.py,拿到的就是初始的空字符串值,完全感知不到进程A对config的修改
普通的模块变量赋值只能在同一个进程内生效,跨进程场景下这种共享方式是无效的。
2. 同进程场景下的可能原因:导入路径不统一
如果确认两个模块是在同一个进程内先后执行的,那大概率是两个模块导入config时的路径不一致,导致Python将其识别为两个不同的模块对象:
比如模块1用import config导入,模块2用from 项目根目录 import config导入,此时sys.modules中会存在两个独立的config模块实例,修改其中一个的属性不会同步到另一个。
解决办法
- 跨进程场景下,放弃用模块变量共享数据,改用以下方案:
- 将
ceu、si写入本地临时文件,模块2读取临时文件获取参数 - 用Redis、本地内存数据库等中间件存储共享参数
- 把两个模块的逻辑整合到同一个进程中,先执行模块1的浏览器初始化、变量赋值逻辑,再调用模块2的
my_function
- 将
- 同进程导入路径不一致的场景,统一两个模块的config导入规则,全部用相对导入或者全部用同规则的绝对导入,保证两者导入的是同一个模块实例即可。
内容的提问来源于stack exchange,提问作者jeremoquai
相关产品推荐
相关产品推荐

