Python 实现红绿灯

Posted Presley

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 实现红绿灯相关的知识,希望对你有一定的参考价值。

一、通过Event来实现两个或多个线程间的交互,下面是一个红绿灯的例子,即起动一个线程做交通指挥信号灯,一个线程做车辆,车辆行驶按红灯停,绿灯行的规则。

#!/usr/bin/python
# -*- coding : utf-8 -*-
# 作者: Presley
# 时间: 2018-11-21
# 邮箱:[email protected]
# 这是我用来练习python线程锁的测试脚本

import threading,time
import random

def light():
    if not event.isSet(): #如果没有设定event
        event.set() #wait就不阻塞 #绿灯状态
    count = 0
    while True:
        if count < 10:
            print("33[42;1m--green light on--33[0m")
        elif count <13:
            print("33[43;1m--yellow light on --33[0m")
        elif count <20:
            if event.isSet():
                event.clear()
            print("33[41;1m--red light on-- 33[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--
...

 


以上是关于Python 实现红绿灯的主要内容,如果未能解决你的问题,请参考以下文章

深度学习目标检测:YOLOv5实现红绿灯检测(含红绿灯数据集+训练代码)

深度学习目标检测:YOLOv5实现红绿灯检测(含红绿灯数据集+训练代码)

OpenCV红绿灯识别 轮廓识别 C++ OpenCV 案例实现

自动驾驶 Apollo 源码分析系列,感知篇:将红绿灯检测和识别代码细致走读一遍

模拟实现红绿灯

Python35 events(事件)队列