在多处理中使用pool.join,pool.close的目的?

use*_*451 7 python multithreading

在下面的链接中map,对Pool类的方法进行了解释。

似乎它阻塞了,直到结果准备好为止。这意味着pool.close(); pool.join()在运行后无需执行任何操作pool.map,但是在博客中以这种方式进行了演示。

运行后我是否缺少某些东西或需要做pool.close pool.map(而不是pool.map_async?注意我正在使用[multiprocessing.dummy][2],它提供了与多处理类似的api,但是在后台使用了线程。

https://docs.python.org/2/library/multiprocessing.html#multiprocessing.pool.multiprocessing.Pool.map

THN*_*THN 6

pool.close 告诉池不接受任何新作业。

pool.join 通知池等待所有作业完成然后退出,从而有效清理池。

因此,阻止父进程只是pool.join做事的副作用。

的确,当您调用时pool.map(),父进程将被阻塞,直到map返回结果。但它是一个很好的做法,closejoinpool使用它,更好地管理资源和控制异常之后。

  • @Cody您可以通过`with multiprocessing.Pool(n) as pool: ...`来使用池的上下文管理器。当进程离开“with”代码块时,“pool”将自动关闭并加入。 (5认同)