通过event事件来控制红绿灯通行车辆

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

import time

from multiprocessing import Event,Process

def traffic(e):
    print("\033[31;1m红灯\033[0m")
    while 1:
        if e.is_set():
            time.sleep(2)
            print("\033[31;1m红灯\033[0m")
            e.clear()

        else:
            time.sleep(2)
            print("\033[32;1m绿灯\033[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()

转载于:https://www.cnblogs.com/xiayuhao/p/9683078.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值