1. 程式人生 > >多線程中的event,用於多線程的協調

多線程中的event,用於多線程的協調

true 標誌位 spa top pan target 變化 數據 信號

‘‘‘
簡單的需求:紅綠燈,紅燈停,綠燈行
一個線程扮演紅綠燈,每過一段時間燈變化,3-5個線程扮演車,紅燈停,綠燈行
紅綠燈線程和車的線程會相互依賴
這種場景怎麽實現?---事件
切換一次燈就是一次事件,這次事件的變化造成其他狀態的變化
事件是用於線程之間的數據同步的。事件變化其他線程相應作出變化
應該設置一個全局變量當做燈,車的線程監測全局變量。
事件就是封裝的一個全局變量
event = threading.event()
event.set()   設置標誌位,該狀態下程序激活,“綠燈”
event.clear()  清空標誌位,該狀態下程序阻塞,“紅燈”
event.wait()   一直監測標誌位。如果標誌位沒被設置就阻塞(紅燈),標誌位一設置就激活(綠燈)
event.is_set() 判斷標誌位是否被設定
‘‘‘ import time import threading event = threading.Event() def lighter(): count = 0 event.set() # 剛進來的時候是綠燈 while True: if 4 < count < 10: event.clear() print("[信號燈]:紅,不能通行") elif count >= 10: event.set() count = 0
else: event.set() print("[信號燈]:綠,可以通行") time.sleep(1) count += 1 def car(name): while True: if event.is_set(): print("{0}: green , running...".format(name)) time.sleep(1) else: print("{0}: RED , STOP...".format(name)) event.wait()
print("{0}: 綠燈亮了 , 繼續前進...".format(name)) light = threading.Thread(target=lighter,) light.start() car1 = threading.Thread(target=car, args=("HONDA",)) car1.start()

多線程中的event,用於多線程的協調