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秒之間)
結果: