Python 如果我想给进程池更多的工作,我可以在Pool.close()之前调用Pool.join()?
Python 如果我想给进程池更多的工作,我可以在Pool.close()之前调用Pool.join()?,python,multithreading,multiprocessing,Python,Multithreading,Multiprocessing,多处理的文档介绍了以下关于Pool.join(): 等待辅助进程退出。在使用join()之前,必须调用close()或terminate() 我知道Pool.close()会阻止任何其他任务提交到池中;并且该Pool.join()将等待池完成,然后再继续父进程 那么,为什么我不能在Pool.close()之前调用Pool.join(),以防我想重用我的池来执行多个任务,然后在很久以后调用它呢?例如: pool=pool() pool.map(do1) pool.join()#需要在此处等待同步
多处理
的文档介绍了以下关于Pool.join()
:
等待辅助进程退出。在使用join()
之前,必须调用close()
或terminate()
我知道Pool.close()
会阻止任何其他任务提交到池中;并且该Pool.join()
将等待池完成,然后再继续父进程
那么,为什么我不能在Pool.close()
之前调用Pool.join()
,以防我想重用我的池来执行多个任务,然后在很久以后调用它呢?例如:
pool=pool()
pool.map(do1)
pool.join()#需要在此处等待同步
.
.
.
pool.map(do2)
pool.join()#需要再次在此等待同步
.
.
.
pool.map(do3)
pool.join()#需要再次在此等待同步
pool.close()
#节目结束
为什么在使用
join()
之前必须“调用close()
或terminate()
”?在您的情况下,您不需要在map()
之后调用join()
,因为map()
调用会阻塞,直到所有结果都完成。但是您可以使用map\u async()
,它不阻塞
在
close()
或terminate()之前调用join()
不正确。因为join()
是一个阻塞调用,并等待工作进程退出。因此,在join()
之后不能重用池,只需重新使用池,而无需对其调用任何特殊函数。要继续将作业发送到池中,您无需执行任何特殊操作。如果你还没有完全完成它,就让它自己去做,让它继续做它的事情
那么,为什么我不能在Pool.close()之前调用Pool.join()
因为等待工人退出。不仅要完成任务,还要真正退出。如果您事先没有调用close()
,那么就没有人告诉工人退出,他们处于待命状态,准备接受进一步的任务
因此,调用join()
之前不调用close()
只会挂起-join()
将永远等待工人退出,这是没有人告诉他们的。因此,如果yopu试图这样做,Python会引发一个ValueError(“池仍在运行”)
错误
正如David Schwartz所指出的,不要调用join()
来“同步”——这不起作用。为什么需要调用池中的任何函数?只是重复使用它。