zoukankan      html  css  js  c++  java
  • 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("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--
    ...
  • 相关阅读:
    20155339 Exp9 Web安全基础
    20155339 Exp8 Web基础
    20155339 Exp7 网络欺诈防范
    20155339 Exp6 信息搜集与漏洞扫描
    20155339 Exp5 MSF基础应用
    20155339 Exp4 恶意代码分析
    20155339 Exp3 免杀原理与实践
    20155339平措卓玛 Exp2 后门原理与实践
    20155339平措卓玛 Exp1 PC平台逆向破解(5)M
    20155339 第16周课堂实践加分作业
  • 原文地址:https://www.cnblogs.com/Presley-lpc/p/9998128.html
Copyright © 2011-2022 走看看