利用进程池实现多进程
进程池使用基础
当需要创建的子进程数量不多时,可以直接利用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之后使用;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」