我一直在学习python中的多进程模块,我注意到 documentation与Pool一起使用...
with Pool(processes=4) as pool:
pool.map(function,item)
与
pool=Pool(4)
pool.map(function,item)
但是在我所看到的所有示例中,实际上我只是在使用pool = Pool(#)。 with的区别和目的是什么。我知道with是used to wrap the execution of a block with methods defined by a context manager,但它对Pool有什么作用。我想我只是不了解Pool。
答案 0 :(得分:0)
with在python中用于上下文管理。
与pool一起使用时,等效于map或apply方法之后调用pool.close()。 如果不调用,最终将在计算机上产生大量幻影进程。
另一个例子是在处理文件时使用with,因此隐式调用f.close()
答案 1 :(得分:0)
It just implicitly calls the close
method:
3.3版中的新增功能:连接对象现在支持上下文管理协议–请参阅上下文管理器类型。
__enter__()
返回连接对象,__exit__()
调用close()
。
答案 2 :(得分:0)
如果您阅读multiprocessing.pools.Pool
类的源代码,则会看到它具有:
def __exit__(self, exc_type, exc_val, exc_tb):
self.terminate()
因此,当上下文管理器结束时,它只为您调用terminate()
方法。
terminate()
方法立即停止工作进程,而无需完成未完成的工作,而close()
方法仅阻止将更多任务提交给池。
3.3版中的新增功能:
Pool
个对象现在支持上下文管理 协议–请参阅上下文管理器类型。__enter__()
返回池 对象,然后__exit__()
调用terminate()
。