利用进程池实现多进程

进程池使用基础

当需要创建的子进程数量不多时,可以直接利用multiprocessing中的Process动态成生多个进程,但如果是上百甚至上千个目标,手动的去创建进程的工作量巨大,此时就可以用到multiprocessing模块提供的Pool方法。
初始化进程池时需要给定最大进程数,当请求Pool时会根据当前池子中获取进程,如果有可用进程则执行,如果没有可用进程则等待,直到有可用进程。

下例:首先会创建一个包含5个进程的进程池。然后,使用 apply_async 方法异步地向进程池提交20个任务。每个任务调用函数 fun,并传递参数 "子进程" 和 500 作为位置参数,以及 {"a": "1", "b": "2"} 作为关键字参数。由于进程池的大小为5,因此前5个任务会立即开始执行,而后续的任务将等待之前的任务完成后才能执行。

from multiprocessing import Pool
import os
import time
def fun(name,age,**kwargs):
	print("当前进程pid",os.getpid(),"参数列表",name,age,kwargs)
	time.sleep(1)

if __name__ == "__main__":
    #开启五个进程处理进程池任务
	pool = Pool(5)
	#向进程池中放置任务
	for i in range(20):
		pool.apply_async(fun,("子进程",500),{"a":"1","b":"2"})
	pool.close()
	pool.join()
	print("finish")

multiprocessing.Pool常用函数解析:
apply_async(func, args, kwds) :使用非阻塞方式调用func(并执行,堵塞方式必须等待上一个进程退出才能执行下一个进程),args为传递给func的参数列表,kwds为传递给func的关键字参数列表;
apply(func, args, kwds):使用阻塞方式调用func
close():关闭Pool,使其不再接受新的任务;
terminate():不管任务是否完成,立即终止;
join():主进程阻塞,等待子进程的退出, 必须在close或terminate之后使用;

posted @   向众神祈祷  阅读(35)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」

喜欢请打赏

扫描二维码打赏

微信打赏

喜欢请打赏

扫描二维码打赏

微信打赏

点击右上角即可分享
微信分享提示