运用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
结束主进程

 

posted @ 2019-04-23 21:42  wygbbb  阅读(344)  评论(0编辑  收藏  举报