用于python多处理池的目的
我一直在学习python中的多进程模块,我注意到 他们使用游泳池用于python多处理池的目的,python,python-multiprocessing,Python,Python Multiprocessing,我一直在学习python中的多进程模块,我注意到 他们使用游泳池 将池(进程=4)作为池: pool.map(功能、项目) vs pool=pool(4) pool.map(功能、项目) 但是在我看到的所有例子中,我只是使用pool=pool(#)。这项研究的目的和区别是什么。我知道这一点,但它对游泳池有什么作用呢。我想我只是不理解池。with在python中用于上下文管理 与pool一起使用时,它相当于在map或apply方法之后调用pool.close()。 如果不调用,您的机器上会出现大量
将池(进程=4)作为池:
pool.map(功能、项目)
vs
pool=pool(4)
pool.map(功能、项目)
但是在我看到的所有例子中,我只是使用pool=pool(#)。这项研究的目的和区别是什么。我知道这一点,但它对游泳池有什么作用呢。我想我只是不理解池。with在python中用于上下文管理 与pool一起使用时,它相当于在map或apply方法之后调用pool.close()。 如果不调用,您的机器上会出现大量的重影进程 另一个例子是在处理文件时使用with,因此隐式调用f.close() 版本3.3中新增:连接对象现在支持上下文管理协议–请参阅上下文管理器类型
\uuuu enter\uuuu()
返回连接对象,\uuuuu exit\uuuuu()
调用close()
如果阅读
multiprocessing.pools.Pool
类的源代码,您将看到它有:
def __exit__(self, exc_type, exc_val, exc_tb):
self.terminate()
因此,当上下文管理器结束时,它只为您调用terminate()
方法
terminate()
方法会立即停止工作进程,而不会完成未完成的工作,而close()
方法只会阻止向池提交更多任务
从:
3.3版中的新版本:Pool
对象现在支持上下文管理
协议–请参阅上下文管理器类型<代码>\uuuu输入\uuuuu()返回池
对象,并调用终止()