8-2-6python语法基础-并发编程-进程和线程对比学习:进程和线程的事件
前言
进程和线程,有很多地方非常类似,包括使用的方法也很多相同的,
所以我决定放到一起对比学习,
这一篇,专门对比:
进程的事件
线程的事件
进程的事件
# 事件
import time
from multiprocessing import Event, Process
# 一个信号,可以使所有的进程都进入阻塞状态,也可以控制所有信号都解除阻塞,
# 一个事件创建之后,默认是阻塞状态,
# e = Event() # 创建一个事件
# print(e.is_set()) # 查看一个事件是否是阻塞状态,
# print(123445)
# e.set() # 这是把阻塞的状态改为true,
# print(e.is_set())
# e.wait() # 根据e.is_set()的结果,如果是false,就会阻塞,如果是true就会不阻塞
# print(12344)
# e.clear() # 这是把阻塞的状态改为false
# print(e.is_set())
# e.wait() # 虽然阻塞了,但是一定要有这个wait,才会阻塞后面的代码,
# print(444444)
举一个例子,红绿灯
# 每一个进程表示一辆车,
def car(e,i):
#e.is_set() 默认返回False 代表的是绿灯
if not e.is_set():
print("car%s在等待"%i)
e.wait()
print("car%s通行了"%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()
# 模拟启动交通灯
p1=Process(target=light,args=(e,))
p1.daemon=True
p1.start()
#模拟20辆小车
for i in range(20):
import random
time.sleep(random.uniform(0,2))
p2=Process(target=car,args=(e,i))
p2.start()
print("程序彻底结束!")
技术改变命运