python补充之Multiprocessing(六)lock锁
上一章写了关于共享内存的问题,但是出现一个问题,如果多个进程对同一个共享变量做处理,会发生什么?应该会你抢过来处理一点,我抢过来处理一点,可以想象处理的结果很难控制和预测。所以需要lock锁,来保证一个进程完成之后,他所用的共享变量才可以被其他进程使用。
下面写了两个代码,来做一个比较。
以下是没有lock的代码:
import multiprocessing as mp
import time
def job(v, num):
for _ in range(10):
time.sleep(0.1)
v.value += num
print(v.value)
def multicore():
v = mp.Value('i', 0)
p1 = mp.Process(target=job, args=(v, 1))
p2 = mp.Process(target=job, args=(v, 3))
p1.start()
p2.start()
p1.join()
p2.join()
if __name__ == '__main__':
multicore()
在终端中:
pi@raspberrypi:~/Desktop/My_Project/Python_Learning $ python3 5_MultiprocessingLearning.py
结果:
1

本文探讨了在多进程环境中,如何使用lock锁解决共享内存数据竞争问题。通过对比有无lock的情况,展示了lock如何确保进程按顺序访问共享变量,从而实现数据处理的有序性和一致性。
最低0.47元/天 解锁文章
744

被折叠的 条评论
为什么被折叠?



