信号量
from multiprocessing import Process from multiprocessing import Semaphore import time import random def ktv(i,sem): sem.acquire() print('%s走进ktv'%i) time.sleep(random.randint(1,5)) print('%s走出ktv'%i) sem.release() if __name__ == '__main__': sem = Semaphore(4) for i in range(20): p = Process(target=ktv,args=(i,sem)) p.start()
事件
from multiprocessing import Event # 一个信号可以使得所有的进程都进入阻塞状态 # 也可以控制所有的进程解除阻塞 # 一个事件被创建之后,默认是阻塞状态 e = Event() #创建一个事件 print(e.is_set()) #查看一个事件的状态,默认被设置为阻塞 print(12345) e.set() #将这个事件的状态改为true print(e.is_set()) #查看一个事件的状态,默认被设置为阻塞 e.wait() #是依据e.is_set()的值来决定是否阻塞 print(12345677) e.clear() #将这个事件的状态改为False e.wait() #是依据e.is_set()的值来决定是否阻塞 print('###############3')
set 和 clear:分别用来修改一个事件的状态。True或False
# is_set 用来查看一个事件的状态
# wait 是依据事件的状态来决定自己是否阻塞 False是阻塞。True是不阻塞
# 红绿灯事件 from multiprocessing import Event from multiprocessing import Process import random import time def cars(e,i): if not e.is_set(): print('car%i在等等'%i) e.wait() #阻塞直到得到一个事件状态,事件状态改变成true的信号 print('car%i通过'%i) '车通行' def light(e): while True: if e.is_set(): e.clear() print('