事件

事件

  • 导入模块:from multiprocessing import Event
  • 实例化事件对象:e = Event()
  • 事件是通过is_set()的bool值,去标识e.wait()的阻塞状态
  • 当is_set()的bool值为False时,e.wait()是阻塞状态
  • 当is_set()的bool值为True时,e.wait()是非阻塞状态
  • 当使用e.set()时是把bool变为Ture
  • 当使用e.clear()时是把bool变为False

from multiprocessing import Process, Event
import time
import logging
import os
import time

base_dir = os.path.dirname(__file__)
print(base_dir)
'''日志程序'''
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
# sh = logging.StreamHandler()
fh = logging.FileHandler(base_dir + 'red_green_light.log', encoding='utf-8')
formater = logging.Formatter('%(asctime)s [line:%(lineno)d] %(filename)s  %(levelname)s %(message)s %(process)d')
fh.setFormatter(formater)
logger.addHandler(fh)

def red_green_light(e):
    while 1:
        if e.is_set():
            time.sleep(6)
            e.clear()
            print('\033[31m红灯停\033[0m')

        else:
            time.sleep(6)
            e.set()
            print('\033[34m绿灯行\033[0m')

def car(e, i):
    e.wait()
    current_time = time.strftime('%Y-%m-%d %H:%M:%S')
    print('第%s辆车%s通过红绿灯' % (i, current_time))


if __name__ == '__main__':
    e = Event()
    p1 = Process(target=red_green_light, args=(e,))
    p1.start()
    for i in range(1, 81):
        if i % 3 == 0:
            time.sleep(2)
        else:
            time.sleep(3)
        p2 = Process(target=car, args=(e,i))
        p2.start()


posted @ 2020-03-08 14:02  大道至诚  阅读(80)  评论(0编辑  收藏  举报