Python多进程全局变量实时共享问题求助
解决multiprocessing进程间变量共享问题
你的问题根源在于:Python多进程(multiprocessing)的子进程会复制父进程的内存空间,二者拥有独立的内存区域,主进程后续修改的变量无法自动同步到子进程。另外你原代码里主进程的WH和delay是局部变量(没加global声明),连全局变量都没修改,子进程自然拿不到更新后的值。
下面给两种适配你场景的解决方案:
方案1:直接传递参数(适合每次启动新子进程的场景)
这是最简单直接的方式,把读取到的配置作为参数传给子进程,不需要共享变量:
import json import multiprocessing import time def comprobar(wh_val, delay_val): print(wh_val) print(delay_val) if __name__ == "__main__": while True: with open("configUsers.json") as archivo: data = json.load(archivo) wh = data['WH'] delay = data['delay'] # 将配置作为参数传入子进程 process = multiprocessing.Process(name="hilo1", target=comprobar, args=(wh, delay)) process.start() time.sleep(0.5)
方案2:用Manager共享字典(适合子进程长期运行、实时读取更新的场景)
如果你的子进程需要持续运行,而非每次重启,用multiprocessing.Manager创建的共享字典可以让主进程和子进程共享变量,实时同步更新:
import json import multiprocessing import time def comprobar(shared_config): # 子进程持续读取共享配置 while True: print(shared_config['WH']) print(shared_config['delay']) time.sleep(0.5) if __name__ == "__main__": # 创建Manager管理共享对象 manager = multiprocessing.Manager() shared_config = manager.dict() # 启动长期运行的子进程 process = multiprocessing.Process(name="hilo1", target=comprobar, args=(shared_config,)) process.start() # 主进程持续读取文件并更新共享配置 while True: with open("configUsers.json") as archivo: data = json.load(archivo) shared_config['WH'] = data['WH'] shared_config['delay'] = data['delay'] time.sleep(0.5)
说明:
- 方案1适配你原代码的逻辑:每次读取配置后启动新子进程,直接传参数避免了进程间共享的复杂度。
- 方案2适合子进程不需要频繁重启的场景,主进程更新共享字典后,子进程能实时读取到最新值。
内容的提问来源于stack exchange,提问作者Chupitastiiks
相关产品推荐
相关产品推荐

