学习手扎20190416——事件Event

from multiprocessing import Process, Event

# 事件(Event)
# 一个信号可以使得所有的进程都进入阻塞状态
# 也可以控制所有的进程解除阻塞
# 一个事件被创建之默认是阻塞状态

e = Event()     # 创建一个事件
e.is_set()      # 查看一个事件的状态
e.set()         # 将一个事件的状态改为True
print(123456)
e.wait()        # 是依据e.is_set的值来决定是否阻塞
print(123456)
e.clear()       # 将一个事件的状态改为False

红绿灯事件:

import time
import random
from multiprocessing import Event,Process


def cars(e,i):
    if not e.is_set():
        print('car%i在等待'%i)
        e.wait()    # 阻塞 直到得到一个 事件状态变成 True 的信号
    print('car%i通过' % i)


def light(e):
    while True:
        if e.is_set():
            e.clear()
            print('红灯亮了')
        else:
            e.set()
            print('绿灯亮了')
        time.sleep(2)


if __name__ == '__main__':
    e = Event()
    traffic = Process(target=light,args=(e,))
    traffic.start()
    for i in range(20):
        car = Process(target=cars, args=(e,i))
        car.start()
        time.sleep(random.random())

你可能感兴趣的:(Python)