1. 程式人生 > >python-threading.Event實現事件功能--汽車過紅綠燈(轉載)

python-threading.Event實現事件功能--汽車過紅綠燈(轉載)

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實現事件功能--汽車過紅綠燈(轉載)