31 事件

事件:通过一个信号来控制多个进程同时执行或者阻塞。
一个信号可以使所有的进程都进入到阻塞状态,也可以控制所有的进程接触阻塞,一个时间被创建之后,默认是阻塞的状态

from multiprocessing import Event
e = Event()		#创建一个事件
print(e.is_set())	#查看状态,默认是阻塞状态
print(123456)
e.wait()	#依据e.is_set()的指来决定是否阻塞
print(123456)	#这个不会被打印,因为阻塞

输出:
在这里插入图片描述

from multiprocessing import Event
e = Event()
print(e.is_set())	#查看状态,默认是阻塞状态
print(123456)
e.set()     #将这个事件状态改为True
print(e.is_set())
e.wait()	#依据e.is_set()的指来决定是否阻塞
print(123456)

输出:

在这里插入图片描述

from multiprocessing import Event
e = Event()
print(e.is_set())	#查看一个时间的状态,默认是阻塞状态
print(123456)
e.set()     #将这个事件状态改为True
print(e.is_set())
e.wait()	#依据e.is_set()的指来决定是否阻塞
print(123456)	#这个不会被打印,因为阻塞
e.clear()   #将事件状态改为False
print(e.is_set())
e.wait()
print('*'*10)

输出:
在这里插入图片描述

setclear分别用来修改一个事件的状态,True或者False
is_set用来查看事件的状态
wait依据事件的状态来决定自己是否阻塞 False阻塞,True非阻塞

红绿灯事件

import random, time
from multiprocessing import Process, Event


def cars(e, i):
    # pass
    if not e.is_set():
        print('car%d在等待' % i)
        e.wait()  # 阻塞,直到一个事件状态变为True
    print('\033[32mcar%d通过\033[0m' % i)


def light(e):
    while True:
        if e.is_set():
            e.clear()
            print('\033[31m红灯亮了\033[0m')
        else:
            e.set()
            print('\033[32m绿灯亮了\033[0m')
        time.sleep(2)


if __name__ == '__main__':
    e = Event()
    traffic = Process(target=light, args=(e,))
    traffic.start()
    # print(e.is_set())
    for i in range(20):
        # print(e.is_set())
        car = Process(target=cars, args=(e, i))	# 此时e的状态位True
        car.start()
        time.sleep(random.random())

猜你喜欢

转载自blog.csdn.net/weixin_43265998/article/details/90240343
31
31)