zoukankan      html  css  js  c++  java
  • 通过event事件来控制红绿灯通行车辆

    事件的初始值为False,所以最开始就是红灯,先模拟红绿灯的规律,设定为每两秒变换一次灯,然后再模拟车辆通行,通过事件来将两者的事件结合起来,
    当事件为False时,为红灯,车辆处于等待状态,一直wait,但是当事件为True时,变为绿灯,阻塞状态取消,车辆为通行状态。在此文件中,设定车辆通行完成
    则执行结束,故管理车辆通行的函数设定为join,红绿灯函数随着主进程的结束而结束,故设定为守护进程。

    import time
    
    from multiprocessing import Event,Process
    
    def traffic(e):
        print("33[31;1m红灯33[0m")
        while 1:
            if e.is_set():
                time.sleep(2)
                print("33[31;1m红灯33[0m")
                e.clear()
    
            else:
                time.sleep(2)
                print("33[32;1m绿灯33[0m")
                e.set()
    
    def car(e,i):
        if not e.is_set():
            print("%s 正在等车..." %i)
            e.wait()
        print("%s 通过" %i)
    
    if __name__ == '__main__':
        e = Event()
        c_l = []
        p = Process(target=traffic, args=(e,))
        p.daemon = True
        p.start()
        for i in range(20):
            time.sleep(random.randint(0,2)) #模拟随机车辆通行
            c = Process(target=car,args=(e,"car%s"%i))
            c.start()
            c_l.append(c)
        for c in c_l:
            c.join()
    
  • 相关阅读:
    三层架构及生活实例
    初识ADO.NET
    remoting与socket、web service的比较及实例
    ERP与MES
    25人赛跑问题-得出前三名
    WPF导学目录
    心目中的职业初规划
    应用服务器
    2015广深骑行记
    ASP.NET的几个试题(《C#与.NET程序员面试宝典》)
  • 原文地址:https://www.cnblogs.com/xiayuhao/p/9683078.html
Copyright © 2011-2022 走看看