python-threading.Event實現事件功能--汽車過紅綠燈(轉載)
阿新 • • 發佈:2018-10-11
pan class 控制 http 紅綠燈 dom and false blank
python-threading.Event實現事件功能
enent可以通過設置、等待、清除一個標識(flag),來進行線程間的控制
線程可以通過獲取這個標誌位(flag)的狀態(設置或未設置)來控制線程
事件其實就相當於一個全局變量(設置為True,未設置為False),線程通過這個全局變量的狀態來控制自身
event只要set,clear,wait三個方法
使用前先實例化event = threading.Event()
event.wait()#線程阻塞,等待標誌位被設置
event.set()#設置標誌位
event.clear()#清除標誌位
enent.isSet()#標誌位是否被設置
紅綠燈事件模型,設置一個全局event,紅綠燈進程按照時間改變event值,車輛進程根據event值作出相應動作。
import threading import time,random event = threading.Event() #set為綠燈,clear為紅燈 def light(): count = 0 if not event.isSet(): event.set()#設置初始狀態為綠燈 while True: if count <10: #綠燈 print(‘\033[1;42;1m綠燈-可以通行 %s\033[0m‘%count) event.set()elif count <13: #黃燈 print(‘\033[1;43;1m黃燈 %s\033[0m‘ % count) elif count <25: #紅燈 print(‘\033[1;41;1m紅燈-禁止通行 %s\033[0m‘ % count) event.clear() else: count = 0 event.set() count +=1 time.sleep(1) def car(n): while True: time.sleep(1)#random.randrange(3) if event.isSet():#綠燈狀態 print(‘car[%s] is running...‘%str(n)) #event.wait() else: print(‘car[%s] is waitting ...‘%str(n)) event.wait()#阻塞等待標誌位被設定 def main(): t_light = threading.Thread(target=light) t_light.start() for i in range(3): t_car = threading.Thread(target=car,args=(i,)) t_car.start() main()
原文地址https://www.cnblogs.com/limich/p/7477079.html
python-threading.Event實現事件功能--汽車過紅綠燈(轉載)