Python--day38--事件
1,事件的方法:
#set和clear
#分别用来修改一个事件的状态 True或者False
#is_set用来查看一个事件的状态
#wait 是依据事件的状态来决定自己是否阻塞
# False最 True不阻塞
2,事件的创建和事件的方法示例:
1 #通过一个信号 来控制 多个进程 同时 执行或者阻塞 2 #事件 3 from multiprocessing import Event 4 #一个信号可以使所有的进程都进入阻塞状态 5 #也可以控制所有的进程解除阻塞 6 #一个事件被创建之后,默认是阻塞状态 7 e = Event() #创建了一个事件 8 print(e.is_set()) #查看一个事件的状态,默认被设置成阻塞 9 e.set() #将这个事情的状态改为True 10 print(e.is_set()) 11 e.wait() #是依据e.is_set()的值来决定是阻塞的 12 print(123456) 13 e.clear() #将这个事件的状态改为False 14 print(e.is_set()) 15 e.wait() 16 print('*'*10)
3,红绿灯事件模型例子
1 import time 2 import random 3 4 from multiprocessing import Event,Process 5 def cars(e,i): 6 if not e.is_set(): 7 print('car%i在等待' % i) 8 e.wait() #阻塞 直到得到一个 事件状态变成True 的信号 9 print('\033[0;32;40mcar%i通过\033[0m'%i) 10 11 12 def light(e): 13 while True: 14 if e.is_set(): 15 e.clear() 16 print('\033[31m红灯亮了\033[0m') 17 18 else: 19 e.set() 20 print('\033[32m绿灯亮了\033[0m') 21 time.sleep(2) 22 23 if __name__ == '__main__': 24 e = Event() 25 traffic = Process(target=light,args=(e,)) 26 traffic.start() 27 for i in range(20): 28 car = Process(target=cars, args=(e,i)) 29 car.start() 30 time.sleep(random.random())