[英]Global variable increment and python multiprocessing
嗨,我有下面的多进程代码,我想确保全局变量ctr应该被所有末端节点或决策树的叶子更新。 但这没有发生。
ctr=0
def update(l,n):
global ctr
l.acquire()
ctr+=n
l.release()
def func(x,i):
p2=[]
if i > 100:
lock=Lock()
update(lock,len(rl))
# create list a1
# create list a2
i=len(a1)
for a in a1:
for b in a2:
if x > (a+b):
proc=Process(target=func,args=(a+b,i,))
p2.append(proc)
for p in p2:
p.start()
p.join()
当您使用Python(或其他任何语言)启动新进程时,所有进程将使用相同的内存段进行读取访问。 但是,一旦您开始写入一些内存(例如更新变量),该变量就会被复制到新进程自己的内存段中。
换句话说,您无法更新全局变量并期望多个进程看到相同的值,因此您需要某种共享内存。
查看有关多处理的文档
但是请记住,更新全局变量涉及一定数量的锁定,基本上会迫使您的多个进程以串行方式运行。 根据您的用例,这可能会对性能产生负面影响。 您应该尽可能避免使用全局状态(这是更一般的建议,但是在多处理情况下,拥有全局状态甚至更糟。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.