3

我想了解在Python多處理,我寫了下面的程序:process join()如何工作?

from multiprocessing import Process 

numOfLoops = 10 

#function for each process 
def func(): 
    a = float(0.0) 
    for i in xrange(0, numOfLoops): 
     a += 0.5 
     print a 

processes = [] 
numOfProcesses = 2 
#create the processes 
for i in xrange(0, numOfProcesses): 
    processes.append(Process(target=func)) 

for process in processes: 
    process.start() #Start the processes 
for process in processes: 
    process.join() #wait for each process to terminate 

print "shouldn't this statement be printed at the end??" 

我創建的執行函數func兩個過程()。我使用join()方法來等待每個進程在繼續執行程序之前終止。這是否意味着在兩個過程執行完功能後,最後的打印語句應該在程序結束時打印? 但我的輸出是:

shouldn't this statement be printed at the end?? 
1 
1 
2 
2 
3 
3 
4 
4 
5 
5 
6 
6 
7 
7 
8 
8 
9 
9 
10 
10 

這不是我所期望的。你能解釋一下發生了什麼嗎?

+3

會發生什麼,如果你'進口sys',並把'sys.stdout.flush()'最終打印過嗎? –

+0

@DavisYoshida,如果我使用flush(),則輸出如我所料。我仍然不明白髮生了什麼事。 –

+0

如果我理解正確,輸出被緩衝,但進程正在按照我預期的順序執行函數。 –

回答

3

這很簡單,它只是等待每個正在運行的進程完成,當發生這種情況時,它會返回。

之所以被稱爲join是加盟流程集成到一個一個。 enter image description here