1. 信号量
对于多进程来说,多个进程同时修改数据,就可能出现安全隐患,所以引入了锁,这一机制,但锁只能有一把来控制一个的开关,当你需要几把锁的时候,就可能用到信号量的概念。他是用了锁的原理,内置了一个计数器,在同一时内,只能有指定数量的进程来执行某一段被控制的代码。
import
time,random
from multiprocessing import Process,Semaphore
def singing(i,sem):
‘‘‘
:param i: 随机生成20个数的值
:param sem:生成的信号量
:return:None
‘‘‘
sem.acquire()#获得锁print(‘%s is coming ‘%i)
time.sleep(random.randint(10,20))#随机在10秒至20秒中停顿print(‘%s is going out‘%i)
sem.release()#释放锁if__name__ == ‘__main__‘:
sem = Semaphore(4)#生成4个锁for i in range(20):
p = Process(target=singing,args=(i,sem))
p.start()
2. 事件
事件是通过一个信号来控制多个进程的同时执行或阻塞,当一个事件被创建的时候默认是阻塞状态,但不影响进程的执行,当遇到 even.wait() 方法时,才会阻塞。
#
set 和 clear
#
分别用来修改一个事件的状态 True或者False
#
is_set 用来查看一个事件的状态
#
wait 是依据事件的状态来决定自己是否在wait处阻塞
#
False阻塞 True不阻塞
下面是一个红绿灯的问题。
import
time
import
random
from multiprocessing import Event,Process
def cars(e,i):
‘‘‘
一个判断车是否通过的函数
:param e: 传入一个事件
:param i: 生成的车几
:return: None
‘‘‘ifnot e.is_set():
print(‘