python multiprocessing lock_python补充之Multiprocessing(六)lock锁

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

4

5

8

9

12

13

16

17

20

21

24

25

28

29

32

33

36

37

40

可以看出,两个进程互相抢夺共享内存中的变量进行处理,显得很没有规律。

下面是加了lock后的代码:

import multiprocessing as mp

import time

def job(v, num, l): #传入锁

l.acquire() #锁住共享变量

for _ in range(10):

time.sleep(0.1)

v.value += num

print(v.value)

l.release() #释放共享变量

def multicore():

l = mp.Lock() #定义锁

v = mp.Value('i', 0)

p1 = mp.Process(target=job, args=(v, 1, l)) #传入锁

p2 = mp.Process(target=job, args=(v, 3, l))

p1.start()

p2.start()

p1.join()

p2.join()

if __name__ == '__main__':

multicore()

在终端中:

pi@raspberrypi:~/Desktop/My_Project/Python_Learning $ python3 5_MultiprocessingLearning.py

结果:

1

2

3

4

5

6

7

8

9

10

13

16

19

22

25

28

31

34

37

40

可以看出,是p1进程结束之后,p2进程才开始对共享变量v做处理。

支持就结束了,希望可以帮助到大家!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值