1 # -*- coding:utf-8 -*- 2 from multiprocessing import Pool 3 import os,time,random 4 5 6 def worker(msg): 7 t_start = time.time() 8 print("%s开始执行" % (msg)) 9 # print("进程号是:%d" % os.getpgid()) 10 # random.random()随机生成0-1之间的浮点数 11 time.sleep(random.random()*2) 12 t_stop = time.time() 13 print(msg,"执行完毕,耗时%.2f" % (t_stop-t_start)) 14 15 16 # worker(1) 17 def main(): 18 # 定义一个进程池,最大进程为3 19 20 po = Pool(3) 21 for i in range(0,10): 22 # Pool().apply_async(要调用的目标,(以元祖的形式传递给目标的参数,)) 23 # 每次循环将会用空闲出来的子进程去调用目标 24 po.apply_async(worker,(i,)) 25 26 print("----------start------------") 27 po.close() # 关闭进程池,关闭后po不再接受新的请求 28 po.join() # 等带po中所有子进程执行完成,必须放在close语句之后 29 print("----------end------------") 30 31 32 if __name__ == '__main__': 33 main()
----------start------------ 0开始执行 1开始执行 2开始执行 2 执行完毕,耗时0.04 3开始执行 1 执行完毕,耗时0.88 4开始执行 0 执行完毕,耗时1.33 5开始执行 4 执行完毕,耗时1.02 6开始执行 3 执行完毕,耗时1.88 7开始执行 7 执行完毕,耗时0.96 8开始执行 6 执行完毕,耗时0.99 9开始执行 5 执行完毕,耗时1.90 8 执行完毕,耗时1.09 9 执行完毕,耗时1.19 ----------end------------