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