在使用 python 多处理时使用 pool.map 时是否有理由调用 join ?

Is there ever a reason to call join when using pool.map while using python multiprocessing?

As multiprocessing.Pool().map() 阻止主进程继续执行。而且,到处都说 join 应该在 close 之后调用,这是一种很好的做法。我想通过示例了解在 multiprocessing.Pool().map() 调用

之后使用 join 有意义的场景

它在哪里声明“良好做法”?如果您不再需要池,即您不打算提交任何更多任务 and 您的程序不会终止,但您想要释放池使用的资源并“清理” up”,你可以显式或隐式地调用 terminate,如果你使用 with 块,就会发生这种情况,如下所示:

with Pool() as pool:
   ...
# terminate is called implicitly when the above block exits

但请注意 terminate 不会 等待未完成的任务(如果有的话)完成。如果提交的任务已排队 运行 但尚未 运行ning 或当前正在 运行ning,它们将被取消。

调用 close 会阻止提交更多任务,只有当您不再需要池时才应调用。调用 join,这需要您先调用 close,将等待所有未完成的任务完成以及池中的进程终止。但是,如果您使用 map,根据定义,它将阻塞直到提交的任务完成。因此,除非您提交了任何 other 任务,否则没有必要先调用 close 然后再调用 join。但是,这些调用对于等待使用 apply_async 提交的未完成任务很有用,而不必在 AsyncResult 实例 returned 上显式调用 get那个电话:

pool = Pool()
pool.submit(worker1, args=(arg1, arg2))
pool.submit(worker2, args=(arg3,))
pool.submit(worker3)
# wait for all 3 tasks to complete
pool.close()
pool.join()

当然,以上仅在您不需要辅助函数的任何 return 值时才有用。

所以回答你的问题:不是真的;仅当您碰巧有 other 个异步提交的任务,您正在等待其完成。但是,如果您不打算立即退出程序,这是立即释放池资源的一种方法,另一种方法是调用方法 terminate.