簡體   English   中英

用於Python多處理池的目的

[英]Purpose of using with for python multiprocessing pool

我一直在學習python中的多進程模塊,並且在它們與Pool一起使用的文檔中注意到了...

with Pool(processes=4) as pool: pool.map(function,item) vs.

pool=Pool(4) pool.map(function,item)

但是在我看到的所有示例中,實際上,我只是使用pool = Pool(#)。 with的區別和目的是什么。 我知道with是用來用上下文管理器定義的方法來包裝塊的執行的,但是它對Pool有什么作用。 我想我只是不了解Pool。

在python中用於上下文管理。

與pool一起使用時,等效於map或apply方法之后調用pool.close()。 如果不調用,最終將在計算機上產生大量幻影進程。

另一個示例是with在處理文件時的用法,因此隱式調用f.close()

它只是隱式調用close方法:

版本3.3中的新增功能:連接對象現在支持上下文管理協議–請參閱上下文管理器類型。 __enter__()返回連接對象,而__exit__()調用close()

如果您閱讀multiprocessing.pools.Pool類的源代碼,您將看到它具有:

def __exit__(self, exc_type, exc_val, exc_tb):
    self.terminate()

因此,當上下文管理器結束時,它只是為您調用terminate()方法。

terminate()方法將立即停止工作進程,而無需完成未完成的工作,而close()方法僅阻止將更多任務提交給池。

文檔中

版本3.3中的新增功能: Pool對象現在支持上下文管理協議-請參閱上下文管理器類型。 __enter__()返回池對象,而__exit__()調用__exit__() terminate()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM