Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果我想给进程池更多的工作,我可以在Pool.close()之前调用Pool.join()?_Python_Multithreading_Multiprocessing - Fatal编程技术网

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()
来“同步”——这不起作用。

为什么需要调用池中的任何函数?只是重复使用它。