进程池
产生原因:
如果有大量的任务需要多进程完成,则可以需要频繁的创建删除进程,给计算机带来了较多的资源消耗
处理原理:
创建适当的进程放入进程池,用来处理待处理事件,处理完毕后进程不销毁,仍然在进程池中等待处理其他事件。进程的复用降低了资源的消耗。
使用方法:
1.创建进程池,在池内放入适当的进程
2.将事件加入到进程池,等待队列
3.不断取进程执行事件,知道所有事件执行完毕
4.关闭进程池,回收进程
函数方法:
Pool(processes)
功能:创建进程池对象
参数:进程数量
返回 : 进程池对象
pool.apply_async(func, args, kwds) 异步
功能:将事件放入到进程池队列
参数:func 事件函数
args 以元组形式给func传参
kwds 以字典形式给func传参
返回值:返回一个代表进程池事件的对象
pool.apply(func, args, kwds) 同步
功能:将事件放入到进程池队列
参数:func 事件函数
args 以元组形式给func传参
kwds 以字典形式给func传参
pool.close()
功能:关闭进程池
pool.join()
功能:回收进程池 注意:具有阻塞功能,等待子进程运行结束
pool.map(func, iter)
功能:将要做的事件放入进程池
参数:func 要执行的函数
iter 迭代对象
返回值:返回事件函数的返回值列表
实例代码: from multiprocessing import Pool from time import sleep,ctime def worker(msg): sleep(2) print(msg) return ctime() #创建进程池 pool = Pool(processes = 4) result = [] for i in range(10): msg = "hello %d" % i #将事件放入进程池队列,等待执行 r = pool.apply_async(func = worker, args = (msg,)) result.append(r) #光闭进程池 pool.close() #回收 pool.join() for i in result: print(i.get()) #获取对象的还回值
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步