我想用
Pool
作为上下文管理器(例如,
with ...
)是可取的。它是对
游泳池
它可以让你更干净地封装游泳池的寿命。
需要注意的一点是,当上下文管理器退出时,它将终止池和任何正在进行的任务。这意味着你仍然想做
p.join()
在某些情况下。您的示例不需要这样做,因为
p.map
将阻止执行,直到任务完成为止:
map()内置函数的并行等价物(但它只支持一个iterable参数)。它会一直阻塞,直到结果准备就绪。
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()