Python中的进程池是什么
发布时间:2025-11-03 16:23:06

Pool进程池
当需要创建的子过程数量较少时,可以直接利用multiprocesing中的process动态成生多个过程。但是,如果是数百甚至数千个目标,手动创建过程的工作量是巨大的。此时,可以使用multiprocesing模块提供的pool方法。
当Pool初始化时,可以指定一个过程数。当新请求提交到Pool时,如果池未满,则创建新过程执行请求;但是,如果池中的过程数达到指定值,请求将等待,直到池中的过程结束。
frommultiprocessingimportPool
importos
importtime
importrandom
defworker(msg):
t_start=time.time()
print("%dd过程开始执行%d"%(os.getpid(),msg))
#random.random()在0~1之间随机生成浮点数
time.sleep(random.random()*2)
t_stop=time.time()
print(msg,"执行完毕,耗时%0.2f"%(t_stop-t_start))
if__name__='__main__':
po=Pool(3)#定义一个进程池,进程数为3
foriinrange(0,10):
#Pool.apply_async(要调用的目标,(传递给目标的参数元祖,)
#每一个循环都会使用空闲的子进程来调用目标
po.apply_async(worker,(i,))
print("----start----")
po.close()#关闭进程池,关闭后,po将不再接受新的请求
po.join()#等待po中所有子过程的完成,必须放在close语句后面
print("-----end-----")运行结果如下:
----start---- 4353进程开始执行0 14354进程开始执行 开始执行4355进程2 2.完成执行需要0.20的时间 34355进程开始执行3355 1.完成执行需要1.19的时间 4354进程开始执行4354进程 4.完成执行需要0.37 54354进程开始执行 0.完成执行需要1.57 6353进程开始执行 5.完成执行需要0.19 74354进程开始执行 3.完成执行需要1.63 8355进程开始执行 6.完成执行需要0.49 9353进程开始执行 8.完成执行需要0.75 7.完成执行需要0.90的时间 9.执行完成需要0.63 -----end-----
相关推荐:Python视频教程
multiprocessing.Pool常用函数分析:
apply_async(func[, args[, kwds]]) :使用非阻塞调用func(并行执行,必须等待上一个过程退出才能执行下一个过程),args是传输给func的参数列表,kwds是传输给func的关键字参数列表;
apply(func[, args[, kwds]]):使用阻塞方法调用func
close():关闭Pool,使其不再接受新任务;
terminate():无论任务是否完成,立即终止;
join():主过程堵塞,等待子过程退出, 必须在close或terminate之后使用;
apply堵塞式
frommultiprocessingimportPool
importos
importtime
importrandom
defworker(msg):
t_start=time.time()
print("%dd过程开始执行%d"%(os.getpid(),msg))
#random.random()随机生成0~1之间的浮点数
time.sleep(random.random()*2)
t_stop=time.time()
print(msg,"执行完毕,耗时%0.2f"%(t_stop-t_start))
if__name__='__main__':
po=Pool(3)#定义一个进程池,进程3
foriinrange(0,10):
#Pool.apply_async(要调用的目标(传递给目标参数元祖)
#每个循环都将使用空闲的子过程来调用目标
po.apply(worker,(i,))
print("----start----")
po.close()#关闭进程池,关闭后,po将不再接受新的请求
po.join()#等待po中所有子过程的完成,必须放在close语句后面
print("-----end-----")运行结果如下:
4400进程开始执行00 0.执行完成需要1.89 开始执行4401进程1 1、执行完成,耗时1.91 24402进程开始执行 2.完成执行需要1.64 34400进程开始执行 3.完成执行需要1.16 4401进程开始执行 4.完成执行需要1.85 54402进程开始执行 5.完成执行需要0.29 64400进程开始执行 6.完成执行需要0.19 74401进程开始执行 7.完成执行需要1.19时间 84402进程开始执行 8.完成执行需要0.61 94400进程开始执行 9.完成执行需要1.08 ----start---- -----end-----
说明:从操作结果可以看出,在主要过程的start和end打印之前,阻塞式会等过程池中的过程已经完成。
相关推荐:
Python的过程是什么?
下一篇 Python中的进程是什么
