gpt4 book ai didi

python - 如果我想给我的进程池更多的工作,我可以在 Pool.close() 之前调用 Pool.join() 吗?

转载 作者:行者123 更新时间:2023-12-03 12:43:41 28 4
gpt4 key购买 nike

multiprocessing 的文档states以下关于Pool.join() :

Wait for the worker processes to exit. One must call close() or terminate() before using join().



我知道 Pool.close()阻止任何其他任务提交到池中;那 Pool.join()在继续父进程之前等待池完成。

那么,为什么我不能调用 Pool.join()之前 Pool.close()如果我想重用我的池来执行多个任务,然后最后 close()很久以后?例如:

pool = Pool()
pool.map(do1)
pool.join() # need to wait here for synchronization
.
.
.
pool.map(do2)
pool.join() # need to wait here again for synchronization
.
.
.
pool.map(do3)
pool.join() # need to wait here again for synchronization
pool.close()

# program ends

为什么在使用 close() 之前必须“调用 terminate()join()”?

最佳答案

So, why can I not call Pool.join() before Pool.close()


因为 join() 等待 worker 退出。不仅要完成他们被赋予的任务,还要真正退出。如果您没有调用 close()事先,没有人告诉 worker 退出,他们处于待命状态,准备接受进一步的任务。
所以调用 join()之前没有调用 close()只会挂- join()将永远等待 worker 退出,没有人告诉他们这样做。出于这个原因,Python 提出了 ValueError("pool is still running")如果 yopu 尝试这样做,则会出错。
正如 David Schwartz 指出的那样,不要调用 join() “同步” - 它不符合这个目的。

关于python - 如果我想给我的进程池更多的工作,我可以在 Pool.close() 之前调用 Pool.join() 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59618300/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com