2016-12-15 191 views
0

在下面的情況下何時需要在Pool上調用.join().close()?閱讀文檔,它看起來像是等待流程完成。舉例來說,如果我做這樣的事情:多處理Python池

while True: 
    pool = Pool(processes=4) 
    results = [] 
    for x in range(1000): 
     result = pool.apply_async(f, (x,)) 
     results.append(result) 

    for result in results: 
     result.get(timeout=1) 
    print "finished" 

我還需要等待其他過程與join()close()完成?正如我所假設的那樣,因爲我正在迭代所有異步結果並等待(阻止)完成,到達print finished時,所有進程都已退出?

這是正確的嗎?

此外,什麼時候進程開始工作的功能?我注意到有4個進程與ps -elf並行運行。在這種情況下調用result.get()之後,這些過程是否只能在該功能上起作用?

回答

0

接近()

被提交到池中防止任何更多的任務。所有任務完成後,工作進程將退出。

join()方法

等待所有進程正常終止

好鏈接只要您撥打pool.apply_async進程將開始在功能上工作,它開始與Proper way to use multiprocessor.Pool in a nested loop

將返回結果對象