Demo code
# Lock 在共享内存中应用
import multiprocessing as mp
# 是应用pool方法 进行数据并行测试,这里不加锁看看效果
# 解释一下数据并行:同样的函数,对不同数据进行操作
# 对应的是任务并行:同样的数据或者不同的数据,要不同的函数进行处理。
def job_no_lock(a, num):
for i in range(10):
a.value += num # a是共享内存的变量
print(a.value)
# return a
# 加锁
def job_with_lock(l, a, num):
l.acquire()
for i in range(10):
a.value += num # a是共享内存的变量
print(a.value)
l.release()
# return a
# 多进程
if __name__ == '__main__':
v = mp.Value('i', 0) # 共享内存变量 num = 0
L = mp.Lock()
# 不加锁的进程
p1 = mp.Process(target=job_no_lock, args=(v, 1)) # l, a +1
p2 = mp.Process(target=job_no_lock, args=(v, 3)) # l, a +3
# 加锁的进程
p3 = mp.Process(target=job_with_lock, args=(L, v, 2)) # +2
p4 = mp.Process(target=job_with_lock, args=(L, v, 4)) # +4
p1.start()
p1.join()
p2.start()
p2.join()
#
p3.start()
p3.join()
p4.start()
p4.join()
* 这里还有一个问题,我在Pycharm里面运行的时候,发现两个进程并没有同时执行 有待解决