python并发

7.python多进程事件-红绿灯

2018-12-27  本文已影响4人  花间派I风月

一、 概述

多进程中的事件Event-进程之间的状态标记通信,它是由进程设置的信号标志,如果信号标志为真,则其他进程等待直到信号接触。
Event对象实现了简单的进程通信机制,它提供了设置信号,清除信号,等待等用于实现进程间通信的方法。
Event对象创建时默认信号设置为False。False时会在wait()处阻塞,True时不阻塞。


二、 常用方法与属性

  1. event.set()
  1. event.clear()
  1. event.warit()
  1. event.is_set()

三、示例

  1. 基本示例
from multiprocessing import Event
if __name__ == '__main__':
    e = Event()
    print(e.is_set()) #False
    # e.wait() <-会阻塞在此处 
    e.clear()  #clear在wait后面,并不能生效。
    print('wait1')
    e.set()
    print(e.is_set()) #True
    e.clear()
    e.wait() #不会阻塞
    print('wait2')

  1. 红绿灯
import random
import time
from multiprocessing import Process, Event

def cars(event, i ):
    if not event.is_set():
        print('cat: %s 等待红灯' %i)
        event.wait() #阻塞直到事件状态变为 True的信号
    else:
        print('\033[0;32;40mcar%i通过\033[0m'%i)

def light(event):
    while True:
        if event.is_set():
            event.clear()
            print('\033[31m红灯亮了\033[0m')
        else:
            event.set()
            print('\033[32m绿灯亮了\033[0m')
        time.sleep(2)
if __name__ == '__main__':
    event = Event()
    p = Process(target=light, args=(event,))
    p.start()
    for i in range(20):
        car = Process(target= cars, args=(event, i ))
        car.start()
        time.sleep(random.random())
上一篇 下一篇

猜你喜欢

热点阅读