用于Python多处理池的目的

时间:2018-07-19 00:26:15

标签: python python-multiprocessing

我一直在学习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。

3 个答案:

答案 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()方法仅阻止将更多任务提交给池。

来自documentation

  

3.3版中的新增功能:Pool个对象现在支持上下文管理   协议–请参阅上下文管理器类型。 __enter__()返回池   对象,然后__exit__()调用terminate()