1.事件
:通过一个信号来控制多个进程同时执行或者阻塞。
一个信号可以使所有的进程都进入阻塞状态,也可以控制所有的进程接触阻塞,一个事件被创建之后,默认是阻塞状态。
from multiprocessing import Event e = Event() #创建事件对象 print(e.is_set()) #查看一个事件的状态:默认是阻塞即False print(11111) e.wait() #依据事件状态,来觉得是否阻塞 print(22222)
结果:
2.解除阻塞:
from multiprocessing import Event e = Event() #创建事件对象 print(e.is_set()) #查看一个事件的状态:默认是阻塞即False print(11111) e.set() #将事件的状态设置为True print(e.is_set()) e.wait() #依据事件状态,来觉得是否阻塞 print(22222)
结果:
3.设置阻塞:
from multiprocessing import Event e = Event() #创建事件对象 print(e.is_set()) #查看一个事件的状态:默认是阻塞即False print(11111) e.set() #将事件的状态设置为True print(e.is_set()) e.wait() #依据事件状态,来觉得是否阻塞 print(22222) e.clear() #将事件的状态改为False e.wait() print(e.is_set()) print(33333)
结果:
应用:
from multiprocessing import Process from multiprocessing import Event import time import random class Car(Process): def __init__(self,e,i): super().__init__() self.e = e self.i = i def run(self): if not self.e.is_set(): print('{}在等红灯'.format(self.i)) self.e.wait() #阻塞,直到事件状态改变 print('{}车通行'.format(self.i)) class MyProcess(Process): def __init__(self,e): super().__init__() self.e = e def run(self): while True: if self.e.is_set(): self.e.clear() print('红灯') else: self.e.set() print('绿灯') time.sleep(2) if __name__ == '__main__': e = Event() q1 = MyProcess(e) q1.start() for i in range(20): q2 = Car(e,i) q2.start() time.sleep(random.random()) #随机暂停时间(0-1秒之间)
结果: