multiprocessing.Array 或Value 结果不稳定的原因

发布时间 2023-03-28 18:04:59作者: 小鱼圆又圆

原因分析

可能是用到了类似“+=”的操作,虽然“=”的操作可能是原子性的(就是说这个操作不能再被分割了)

“+=”是分为两步的,首先获取值,然后进行加和,再赋值给Array中的元素。

 

假设用多个进程对a进行加1操作,即无限循环a+=1的操作:

如果进程1在获取值a过程中,进程2改变了a的值,那么进程1仍然会让a = a+1,但是a本来应该被两个进程各加一次,值为a+2的。

就是因为这个原因,结果不稳定

 

解决方案

加个进程锁(multiprocess.RLock)就好了