python threading 模組控制多執行緒
阿新 • • 發佈:2018-12-27
Python中的threading.Event()操控多執行緒的過程有:
- 定義事件:
- 建立執行緒,傳入對應事件:
- 檢視對應事件的標誌:
- 阻塞對應事件執行緒:
- 繼續對應事件執行緒:
- 結束對應事件執行緒:
- 定義事件:
man_talk_event = threading.Event()
- 建立執行緒,傳入對應事件:
t1 = threading.Thread(target=man, args=(man_talk_event,), name='man')
- 檢視對應事件的標誌:
man_talk_event.is_set()
返回Ture或False
- 阻塞對應事件執行緒:
man_talk_event.wait()
如果事件標誌為True則不阻塞 - 繼續對應事件執行緒:
man_talk_event.set()
設定事件標誌為True
- 結束對應事件執行緒:
man_talk_event.clear()
設定事件標誌為False
- 注意建立執行緒的時候,如果之前設定成t1.setDaemon(True),則不會阻塞主執行緒
import time import threading event = threading.Event() def lighter(): count = 0 event.set() #先設定綠燈 while True: if count >5 and count < 10: #改成紅燈 event.clear() #把標誌位清了 print("\033[41;1mred light is on....\033[0m") elif count >10: event.set() #變綠燈 count = 0 else: print("\033[42;1mgreen light is on....\033[0m") time.sleep(1) count +=1 def car(name): while True: if event.is_set(): #代表綠燈 print("[%s] running..."% name ) time.sleep(1) else: print("[%s] sees red light , waiting...." %name) event.wait() print("\033[34;1m[%s] green light is on, start going...\033[0m" %name) light = threading.Thread(target=lighter,) light.start() car1 = threading.Thread(target=car,args=("Tesla",)) car1.start()