首页 > 代码库 > python基础学习日志day10-进程池
python基础学习日志day10-进程池
一:进程池
进程池内部维护一个进程序列,当使用时,则去进程池中获取一个进程,
如果进程池序列中没有可供使用的进进程,那么程序就会等待,直到进程池中有可用进程为止。
进程池中有两个方法:
- apply
- apply_async
进程池 apply是串行;apply_async是并行
pool必须先要close在join,进程池中进程执行完毕后再关闭,如果注释,那么程序直接关闭
二:代码示例
有join代码和结果
# -*- coding:utf-8 -*- __author__ = ‘shisanjun‘ from multiprocessing import Process,Pool import time def Foo(i): time.sleep(2) return i+100 def Bar(arg): print("-->exec done",arg) if __name__=="__main__":#main如果有main表示手动运行,执行main下面代码,如果是导入模块就不执行 pool=Pool(5) for i in range(10): pool.apply_async(func=Foo,args=(i,),callback=Bar) #Foo执行完的结果会当作参数给Bar #callback是主进程调用,比如数据库连接,如果在子进程每次都生成连接就会占用资源,在主进程只要生成一次 print("end") pool.close() pool.join()#进程池中进程执行完毕后再关闭,如果注释,那么程序直接关闭 """ end -->exec done 100 -->exec done 101 -->exec done 102 -->exec done 103 -->exec done 104 -->exec done 105 -->exec done 106 -->exec done 107 -->exec done 108 -->exec done 109 """
没有join代码,主进程执行完直接退出了,所以子进行没有结果输出
# -*- coding:utf-8 -*- __author__ = ‘shisanjun‘ from multiprocessing import Process,Pool import time def Foo(i): time.sleep(2) return i+100 def Bar(arg): print("-->exec done",arg) if __name__=="__main__":#main如果有main表示手动运行,执行main下面代码,如果是导入模块就不执行 pool=Pool(5) for i in range(10): pool.apply_async(func=Foo,args=(i,),callback=Bar) #Foo执行完的结果会当作参数给Bar #callback是主进程调用,比如数据库连接,如果在子进程每次都生成连接就会占用资源,在主进程只要生成一次 print("end") pool.close() #pool.join()#进程池中进程执行完毕后再关闭,如果注释,那么程序直接关闭
python基础学习日志day10-进程池
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。