----------基础篇
引子
python进程的事件用于主进程控制其他子进程的执行,Event类有如下几个主要方法:
- wait() 插入在进程中插入一个标记(flag)默认为 False,当 flag为False时,程序会停止运行进入阻塞状态;
- set() 使flag为True,程序会进入非阻塞状态;
- clear() 使flag为False,程序会停止运行,进入阻塞状态 ;
- is_set() 判断flag 是否为True,是的话返回True,不是则返回False
红绿灯
(车车现在不是很听话。。。。他们不按照顺序走)
from multiprocessing import Process,Event
import time,random
def car(e,n):
while True:
if not e.is_set(): #Flase
print('红灯亮,car%s等着' %n)
e.wait()
print('车%s 看见绿灯亮了' %n)
time.sleep(random.randint(3,6))
if not e.is_set():
continue
print('car', n ,'走你')
break
def traffic_lights(e,inverval):
while True:
time.sleep(inverval)
if e.is_set():
e.clear() #e.is_set() ---->False
print("红灯亮")
else:
e.set()
print("绿灯亮")
if __name__ == '__main__':
e=Event()
t=Process(target=traffic_lights,args=(e,10))
t.start()
for i in range(10):
p=Process(target=car,args=(e,i,))
p.start()
print('============》')
========================
参考文章:
python之路——进程