import os
from multiprocessing import Pool
from time import sleep
def func1(name):
print(f"进程id:{os.getpid()}-{name}")
sleep(2)
return name
def func2(args):
print(args)
if __name__ == '__main__':
# 方式一
# 创建进程池对象
pool = Pool(5)
# callback=func2 -> 执行完func1后将返回值传给func2
pool.apply_async(func=func1, args=("sxt1",), callback=func2)
pool.apply_async(func=func1, args=("sxt2",), callback=func2)
pool.apply_async(func=func1, args=("sxt3",), callback=func2)
pool.apply_async(func=func1, args=("sxt4",))
pool.apply_async(func=func1, args=("sxt5",))
pool.apply_async(func=func1, args=("sxt6",))
pool.apply_async(func=func1, args=("sxt7",))
pool.apply_async(func=func1, args=("sxt8",))
# 使用完进程池关上
pool.close()
# 等待所有子进程执行完,不然的话,主进程可能直接关掉了进程池,而子进程还没执行完
pool.join()
老师,想问下为什么如果先让子进程执行完(即先运行pool.join()),再让主线程关闭进程池(再运行pool.close()),会报错,正常逻辑不就是这样吗
