通过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()