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())

 

posted @ 2019-01-26 11:23  莱茵河的雨季  阅读(192)  评论(0编辑  收藏  举报