将Python Pool与上下文管理器一起使用或关闭并加入

时间:2019-03-07 02:54:08

标签: python pool

Python documentation的示例格式为

h

但是我看到很多人使用下面的格式。

i

哪个更理想?

1 个答案:

答案 0 :(得分:3)

我认为最好使用Pool作为上下文管理器(例如with ...)。它是Pool的新增功能,它使您可以更简洁地封装池的寿命。

要注意的一件事是,当上下文管理器退出时,它将终止池​​和所有正在进行的任务。这意味着在某些情况下您仍然想做p.join()。您的示例不需要这样做,因为p.map将阻止执行,直到任务完成为止:

  

与map()内置函数的并行等效项(尽管它仅支持一个可迭代的参数)。它会阻塞直到结果准备就绪。

     

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

因此,在第二个示例中,由于任务已完成,因此对.join().close()的调用是多余的,并且将不运行其他任务。

但是,使用.map_async将使.join有用:

with Pool() as p:
    p.map_async(do_something, range(100))
    # Do something else while tasks are running
    p.join()