import os
import random
import time
from multiprocessing import Pool
# Pool 进程池
def run(name):
print('子进程%d启动--%s' % (name, os.getpid()))
start = time.time()
# 随机休眠1~3秒
time.sleep(random.randint(1, 3))
end = time.time()
print('子进程%d结束--%s--耗时%0.2f' % (name, os.getpid(), end - start))
if __name__ == '__main__':
print('父进程启动')
# 进程池 Pool传入2 模拟双核 同时可以启动2个子进程
p = Pool(2)
for i in range(5):
# 创建进程放入进程池
p.apply_async(run, args=(i,))
# 在调用join之前必须先调用close,调用close之后不能添加新的进程
p.close()
# 进程池对象调用join,会等待进程池中所有的子进程结束完毕再去执行父进程
p.join()
print('父进程结束')
代码示例图:
得到的结论有
- 模拟双核,所以同时启动 子进程0 和 子进程 1
- 导入的类发生了改变 Processing 改为 Pool(水池,此刻为进程池)