gpt4 book ai didi

python - 全局变量增量和python多处理

转载 作者:太空宇宙 更新时间:2023-11-04 06:13:50 26 4
gpt4 key购买 nike

您好,我有以下多进程代码,我想确保全局变量 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(或与此相关的任何其他语言)启动新进程时,所有进程都使用相同的内存段进行读取访问。但是,一旦您开始写入某些内存(例如更新变量),该变量就会被复制到新进程自己的内存段中。

换句话说,您不能更新全局变量并期望多个进程看到相同的值,为此您需要某种共享内存。

查看 Multiprocessing 上的文档

不过请记住,更新全局变量涉及一定量的锁定,基本上会强制您的多个进程以串行方式运行。这可能会对性能产生负面影响,具体取决于您的用例。您应该尽可能避免使用全局状态(这是更一般的建议,但在多处理情况下,使用全局状态更糟糕。)

关于python - 全局变量增量和python多处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17080497/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com