#1、事件Event:以交通灯为例。可以控制所有进程等待或者运行。 from multiprocessing import Event e = Event() #实例化一个事件,创建一个交通灯,默认是红灯,阻塞。 e.set() #红变绿,非阻塞。可以控制所有进程通行。。 e.wait() #停的时候看灯,上面代码是绿灯,绿灯行红灯停,所以wait是非阻塞。 e.clear() #绿变红,阻塞。可以控制所有进程等待。 e.is_set() #是否绿灯。True是绿灯,False就是红灯。 #2、Event里面有一个标志flag,当e = Event()刚创建的时候,flag=False,阻塞,这个时候,e.is_set()也是等于False,阻塞。 #e.set()让flag变成非阻塞,s.clear()让flag变成阻塞。 #e.wait() 当flag=True,非阻塞;当flag=False,阻塞。 #3、 from multiprocessing import Process from multiprocessing import Event import time import random def traffic_light(e): #红绿灯 while True: if e.is_set(): #如果是绿灯,3秒后变红灯。 time.sleep(3) print('变红灯') e.clear() #变红灯。 else: time.sleep(3) print('变绿灯') e.set() #变绿灯。 def car(i,e): e.wait() #停下来看一下灯,如果是绿灯,就是不阻塞,接着执行下面的代码,否则红灯阻塞,不执行下面代码。 print('车%s通过'%i) if __name__ == '__main__': e = Event() #创建一个红绿灯。 tra_p = Process(target=traffic_light,args=(e,)) #创建红绿灯转换的进程。 tra_p.start() for i in range(100): #假设有100辆车通过红绿灯。 if i%6 == 0: #每6辆车会随机等1至3秒,如果每6辆车都是等待1秒,那么在3秒的绿灯时间里,可以通过18辆车。 time.sleep(random.randint(1,3)) car_p = Process(target=car,args=(i,e)) car_p.start()
day38-进程-事件
猜你喜欢
转载自www.cnblogs.com/python-daxiong/p/12142723.html
今日推荐
周排行