Python多进程中全局变量未同步更新的问题求助
问题原因
multiprocessing的每个进程拥有独立的内存空间。启动子进程时,它会复制父进程的所有数据(包括全局变量x)到自身内存中。子进程里修改的x只是它的私有副本,和主进程的x完全无关,所以主进程打印的始终是初始值0。
修复代码(使用共享内存)
用multiprocessing.Value创建进程间共享的数值对象,它能在进程间同步数据:
from multiprocessing import Process, Value from time import sleep # 创建共享整数对象,初始值为0,'i'表示整数类型 x = Value('i', 0) def increment(): while True: # 操作共享对象的value属性修改值 with x.get_lock(): # 加锁防止多进程竞争(单进程可省略,推荐保留) x.value += 1 sleep(1) process_1 = Process(target=increment) process_1.start() for _ in range(10): print(x.value) sleep(2) # 清理子进程 process_1.terminate() process_1.join()
其他可行方案
multiprocessing.Queue:子进程将递增后的数值放入队列,主进程从队列读取数据,适合需要传递更复杂数据的场景。multiprocessing.Manager:可创建共享字典、列表等复杂结构,但性能略低于Value。
内容的提问来源于stack exchange,提问作者Karthikeyan Sivaraman
相关产品推荐
相关产品推荐

