多进程是我们需要掌握的技能之一,在多进程和多线程中都有join 方法,今天简单演示一下join在多进程中的应用:
首先我们先看一下,加了join与不加join 的区别:
事例一–加了join:
from multiprocessing import Process
def task():
for i in range(10):
print(f'子 run--{i}')
if __name__ == '__main__':
p = Process(target=task)
p.start() # 向操作系统发送指令
p.join() # 让主进程等待子进程执行完毕再继续向下执行
print('over')
执行结果:
子 run--0
子 run--1
子 run--2
子 run--3
子 run--4
子 run--5
子 run--6
子 run--7
子 run--8
子 run--9
over
事例二–不加join :
from multiprocessing import Process
def task():
for i in range(10):
print(f'子 run--{i}')
if __name__ == '__main__':
p = Process(target=task)
p.start() # 向操作系统发送指令
print('over')
执行结果:
over
子 run--0
子 run--1
子 run--2
子 run--3
子 run--4
子 run--5
子 run--6
子 run--7
子 run--8
子 run--9
通过对比发现 join 有阻塞或等待的作用,在事例一中加了join 结果over在进程执行结束后输出 ,在事例二中,未加join 程序执行 不需等待就可以输出over
下面进步一步验证:
import time
from multiprocessing import Process
def task():
for i in range(10):
time.sleep(1)
print(f'子 run--{i}')
if __name__ == '__main__':
p = Process(target=task)
p.start() # 向操作系统发送指令
time.sleep(3)
print('over')
输出结果:
子 run--0
子 run--1
子 run--2
over
子 run--3
子 run--4
子 run--5
子 run--6
子 run--7
子 run--8
子 run--9
即加了time sleep 方法后 结合事例 我们即可对join有一定的认识和了解。