运用pool进程池启动大量子进程
# Pool进程池类 from multiprocessing import Pool import os import time import random def run(index): print("子进程%s启动----进程ID:%s"%(index, os.getpid())) t1 = time.time() time.sleep(random.random()*5) t2 = time.time() print("子进程%s结束----进程ID:%s--耗时:%2f" % (index, os.getpid(),t2-t1)) if __name__ == "__main__": print("启动主进程") #利用进程池类创建进程池对象 #参数:表示可以同时执行的进程数量 #由于pool的默认值为CPU核心数,如果有4个核心,则至少需要5个子进程才能看到结果
#Pool()里面的参数为数字,代表同时几个子进程一起执行任务
pool = Pool() for i in range(8): #创建子进程并放入进程池中统一管理
#参数为要执行的任务,和给任务传的参数
pool.apply_async(run, args=(i,)) #进程池对象调用join()之前必须先调用close(),意思是关闭进程池,调用close()之后就不能再把创建出来的子进程中,放入到进程池中统一管理了 pool.close() #pool对象调用join方法,主进程会等待进程池中所有的子进程结束在执行主进程 pool.join() print("结束主进程")
启动主进程 子进程0启动----进程ID:11836 子进程1启动----进程ID:3828 子进程2启动----进程ID:4328 子进程3启动----进程ID:14076 #由此能看出同时运行4个子进程,每结束一个子进程,然后开启一个子进程,并且一直保持4个子进程同时运行,运维pool()的参数默认为核心的数量,是可以自定义的 子进程2结束----进程ID:4328--耗时:0.921062 子进程4启动----进程ID:4328 子进程1结束----进程ID:3828--耗时:1.192999 子进程5启动----进程ID:3828 子进程4结束----进程ID:4328--耗时:1.110084 子进程6启动----进程ID:4328 子进程3结束----进程ID:14076--耗时:2.043996 子进程7启动----进程ID:14076 子进程5结束----进程ID:3828--耗时:3.409121 子进程0结束----进程ID:11836--耗时:4.916067 子进程7结束----进程ID:14076--耗时:3.830013 子进程6结束----进程ID:4328--耗时:4.367969 结束主进程