事件
- 导入模块: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()