欢迎来到DIVCSS5查找CSS资料与学习DIV CSS布局技术!
多进程锁
 
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() 方法会阻塞已调用进程锁的进程

如需转载,请注明文章出处和来源网址:http://www.divcss5.com/html/h64104.shtml