[英]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()
版本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.