湖北长安建设网站,衡阳两城区划定高风险区,各学院二级网站建设通报,本地岑溪网站开发平常会经常用到多进程#xff0c;可以用进程池pool来进行自动控制进程#xff0c;下面介绍一下pool的简单使用。需要主动是#xff0c;在Windows上要想使用进程模块#xff0c;就必须把有关进程的代码写if __name__ ‘__main__’ :语句的下面#xff0c;才能正常使用Wind…平常会经常用到多进程可以用进程池pool来进行自动控制进程下面介绍一下pool的简单使用。需要主动是在Windows上要想使用进程模块就必须把有关进程的代码写if __name__ ‘__main__’ :语句的下面才能正常使用Windows下的进程模块。Unix/Linux下则不需要。Pool类Pool类可以提供指定数量的进程供用户调用当有新的请求提交到Pool中时如果池还没有满就会创建一个新的进程来执行请求。如果池满请求就会告知先等待直到池中有进程结束才会创建新的进程来执行这些请求。下面介绍一下multiprocessing 模块下的Pool类下的几个方法1、apply()函数原型apply(func[, args()[, kwds{}]])该函数用于传递不定参数同python中的apply函数一致主进程会被阻塞直到函数执行结束(不建议使用并且3.x以后不在出现)。2、apply_async函数原型apply_async(func[, args()[, kwds{}[, callbackNone]]])与apply用法一致但它是非阻塞的且支持结果返回后进行回调。3、map()函数原型map(func, iterable[, chunksizeNone])Pool类中的map方法与内置的map函数用法行为基本一致它会使进程阻塞直到结果返回。注意虽然第二个参数是一个迭代器但在实际使用中必须在整个队列都就绪后程序才会运行子进程。4、map_async()函数原型map_async(func, iterable[, chunksize[, callback]])与map用法一致但是它是非阻塞的。其有关事项见apply_async。5、close()关闭进程池(pool)使其不在接受新的任务。6、terminal()结束工作进程不在处理未处理的任务。7、join()主进程阻塞等待子进程的退出 join方法要在close或terminate之后使用。简单实现代码importmultiprocessingimporttimedeffunc(msg):print(msg:, msg)time.sleep(3)print(end,, msg)if __name__ __main__:#这里设置允许同时运行的的进程数量要考虑机器cpu的数量进程的数量最好别小于cpu的数量#因为即使大于cpu的数量增加了任务调度的时间效率反而不能有效提高pool multiprocessing.Pool(processes 3)item_list [processes1 ,processes2 ,processes3 ,processes4 ,processes5,]countlen(item_list)for item initem_list:msg hello %s %item#维持执行的进程总数为processes当一个进程执行完毕后会添加新的进程进去pool.apply_async(func, (msg,))pool.close()pool.join()#调用join之前先调用close函数否则会出错。执行完close后不会有新的进程加入到pool,join函数等待所有子进程结束