Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.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多处理池:我如何知道池中的所有工作人员何时完成?_Python_Multiprocessing_Pool - Fatal编程技术网

python多处理池:我如何知道池中的所有工作人员何时完成?

python多处理池:我如何知道池中的所有工作人员何时完成?,python,multiprocessing,pool,Python,Multiprocessing,Pool,我正在用python运行一个多处理池,其中我有大约2000个任务,被映射到24个工作线程。 每个任务都基于一些数据分析和Web服务创建一个文件 我想在池中的所有任务完成后运行一个新任务。如何判断池中的所有进程何时完成 您要使用,它将阻止主进程线程向前移动,直到所有子进程结束: 阻止调用线程,直到调用其join()方法的进程终止或出现可选超时 编辑: 使用 谢谢,但我想问的是pool方法:您可以让多进程自动启动进程。你怎么能在游泳池里玩这个“加入”的把戏?好的,更新答案。您只需在pool实例上调用

我正在用python运行一个多处理池,其中我有大约2000个任务,被映射到24个工作线程。 每个任务都基于一些数据分析和Web服务创建一个文件

我想在池中的所有任务完成后运行一个新任务。如何判断池中的所有进程何时完成

您要使用,它将阻止主进程线程向前移动,直到所有子进程结束:

阻止调用线程,直到调用其join()方法的进程终止或出现可选超时

编辑:

使用


谢谢,但我想问的是pool方法:您可以让多进程自动启动进程。你怎么能在游泳池里玩这个“加入”的把戏?好的,更新答案。您只需在
pool
实例上调用
join()
。请注意,您需要调用
pool.close()
pool.terminate()
,然后才能调用
pool.join()
,因此上面的示例实际上不起作用。还请注意,如果以后不再需要使用池,则使用
join()
来指示工作何时完成是唯一可行的选择,因为这需要关闭或终止池。如果希望进程并行运行,则需要首先调用start()在所有进程上,然后调用join。此接受的答案不是并行运行的,因此不是有效答案。
from multiprocessing import Process

def f(name):
    print 'hello', name

if __name__ == '__main__':
    processes = []
    for i in range(10):
        p = Process(target=f, args=('bob',))
        processes.append(p)

    for p in processes:
        p.start()
        p.join()

     # only get here once all processes have finished.
     print('finished!')
    pool = Pool(processes=4)  # start 4 worker processes
    result = pool.apply_async(f, (10,))  # do some work
    pool.close()
    pool.join()  # block at this line until all processes are done
    print("completed")