Python 實現紅綠燈


一、通過Event來實現兩個或多個線程間的交互,下面是一個紅綠燈的例子,即起動一個線程做交通指揮信號燈,一個線程做車輛,車輛行駛按紅燈停,綠燈行的規則。

#!/usr/bin/python
# -*- coding : utf-8 -*-
# 作者: Presley
# 時間: 2018-11-21
# 郵箱:1209989516@qq.com
# 這是我用來練習python線程鎖的測試腳本

import threading,time
import random

def light():
    if not event.isSet(): #如果沒有設定event
        event.set() #wait就不阻塞 #綠燈狀態
    count = 0
    while True:
        if count < 10:
            print("\033[42;1m--green light on--\033[0m")
        elif count <13:
            print("\033[43;1m--yellow light on --\033[0m")
        elif count <20:
            if event.isSet():
                event.clear()
            print("\033[41;1m--red light on-- \033[0m")
        else:
            count = 0
            event.set() #打開綠燈
        time.sleep(1)
        count +=1
# def car(n):
#     while 1:
#         time.sleep(random.randrange(10))
#         if event.isSet(): #綠燈
#             print("car [%s] is running.." %n)
#         else:
#             print("car [%s] is waiting for the red light.." %n)
def car(n):    #no bug version
    while 1:
        time.sleep(1) #讓車慢點if event.isSet(): #綠燈
            print("car [%s] is running.." %n)
        else:
            print("car [%s] is waiting for the red light.." %n)
            event.wait() #不斷檢查flag有沒有被設定,如果沒有設定就等着,這個是輸入event等待時間,可以精確到毫秒級
if __name__ == "__main__":
    event = threading.Event()
    Light = threading.Thread(target=light)
    Light.start()
    for i in range(3):
        t = threading.Thread(target=car,args=(i,))
        t.start()

執行結果:

--green light on--
--green light on--
car [0] is running..
--green light on--
car [0] is running..
--green light on--
car [2] is running..
--green light on--
--green light on--
--green light on--
car [2] is running..
--green light on--
car [2] is running..
--green light on--
--green light on--
car [1] is running..
car [0] is running..
--yellow light on --
car [0] is running..
--yellow light on --
car [0] is running..
--yellow light on --
--red light on-- 
--red light on-- 
--red light on-- 
car [1] is waiting for the red light..
--red light on-- 
car [0] is waiting for the red light..
--red light on-- 
car [2] is waiting for the red light..
--red light on-- 
--red light on-- 
--green light on--
--green light on--
car [2] is running..
--green light on--
car [1] is running..
--green light on--
--green light on--
car [1] is running..
--green light on--
car [0] is running..
--green light on--
--green light on--
...

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM