python 多进程锁Lock和共享内存(python能做什么)

网友投稿 1390 2022-09-23

python 多进程锁Lock和共享内存(python能做什么)

python 多进程锁Lock和共享内存(python能做什么)

多进程锁

lock = multiprocessing.Lock() 创建一个锁

lock.acquire() 获取锁

lock.release() 释放锁

with lock: 自动获取、释放锁 类似于 with open() as f:

特点:

谁先抢到锁谁先执行,等到该进程执行完成后,其它进程再抢锁执行

当程序不加锁时:

运得没有顺序,三个进程交替运行

当程序加锁时

只有当其中一个进程执行完成后,其它的进程才会去执行,且谁先抢到锁谁先执行

共享内存

agre = multiproessing.Value(type, value) 创建一个共享内存的变量agre

type 声明共享变量agre的类型

value 共享变量agre的值

agre.value 获取共享变量agre的值

arr = muliproessing.Array(type, values) 创建一个共享内存的数组arr

例子:

先执行进程p3并加锁,p3执行过程中进程p执行,因为p没有调用锁且使用了join()方法,阻塞了其它进程,只有当p执行完成后

p3才会继续执行,p3执行完成后,p1抢到锁并执行

p1、p3 都对共享内存num 进行累加操作,所以num的值一直在增加

p 对 arr 共享数组中的每个值进行了重新赋值的操作,所以当P进程执行完成后,arr数组中的值均发生了变化

由上例可以看出:

1、进程锁只对调用它的进程起锁的作用,未调用该锁的进程不受影响

2、在未调用进程锁的进程中使用 join() 方法会阻塞已调用进程锁的进程

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:lsof有一把利器
下一篇:ftp 500 OOPS: could not bind listening IPv4 socket
相关文章

 发表评论

暂时没有评论,来抢沙发吧~