#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2021/9/5 22:59 # @Author : Lhtester # @Site : # @File : pool_实例.py # @Software: PyCharm import random import os import time from multiprocessing import Pool #功能函数 def worker(msg): #开始时间 t_start = time.time() print("%s开始执行,进程号为%d"%(msg,os.getppid())) time.sleep(random.random()*2)#随机休眠 #结束时间 t_stop =time.time() print(msg,"执行完毕,耗时%0.f"%(t_start-t_stop)) if __name__=='__main__': #定义一个进程池,最大进程数为3 po = Pool(3) #循环添加任务 for i in range(0,10): po.apply_async(worker,(i,)) print("---start---") #关闭进程池,关闭后po不再接受新的请求 po.close() #等待po中所有子进程执行完毕,必须放在close语句之后 po.join() print("---end---")
详解:
1.apply_async(func[,args[,kwds]])使用非阻塞方式调用func(并行执行,堵塞方式必须等待上一个进程退出才能执行下一个进程),args为传递给func的参数列表,kwds为传递给func的关键字参数列表。 2.apply(func[,args[,kwds]])使用阻塞方式调用func。是阻塞式添加任务的。 3.close()关闭Pool,使其不再接受新的任务 4.terminate()不管任务是否完成,立即终止 5.join()主进程阻塞,等待子进程的退出,必须在close或terminate之后使用