我尝试使用 multiprocessing 包中的 Pool 来加速计算。虽然我确实获得了显着的加速,但随着核心/工人数量的增加,我丢失了越来越多的值。
我通过 mp.value() 类与所有进程共享我的变量。
我哪里出错了,我该如何解决?
poss = [x+1 for x in range(20)]
all_rolls = itertools.product(poss, repeat=6)
win = mp.Value('i', 0)
draw = mp.Value('i', 0)
loose = mp.Value('i', 0)
def some_func(roll):
if(comparison on rolls):
win.value += 1
elif(other comparison):
draw.value +=1
else:
loose.value +=1
with Pool(8) as p:
p.map(some_func, all_rolls)
在 16 个内核上,我得到了 55,923,638 个值而不是 64,000,000
沧海一幻觉
绝地无双
相关分类