2016-03-25 34 views
0

我正在學習使用多處理庫的python中的多線程。爲此,我試圖創建一個程序,將一個大文件分成幾個小塊。因此,我首先從該文件讀取所有數據,然後創建從該輸入文件獲取一段數據的工作任務,然後將該段寫入文件。我希望有儘可能多的並行線程作爲段數運行,但這不會發生。我看到最多兩個任務,然後程序終止。我在做什麼錯誤。代碼如下。Python的多處理並不是並行創建任務

import multiprocessing 

def worker(segment, x): 
    fname = getFileName(x) 
    writeToFile(segment, fname) 

if __name__ == '__main__': 
    with open(fname) as f: 
     lines = f.readlines() 
    jobs = [] 
    for x in range(0, numberOfSegments): 
     segment = getSegment(x, lines) 
     jobs.append(multiprocessing.Process(target=worker, args=(segment, x))) 
     jobs[len(jobs)-1].start() 
    for p in jobs: 
     p.join 
+0

僅供參考,你忘了叫'join',因此該方案實際上沒有阻止那些'Process'es明確(它會隱除非它們發生重新守護進程)。 – ShadowRanger

+0

我確實調用了join,請參閱代碼的最後兩行。 – pythonic

+1

您引用了它。你沒有打過電話。 'p.join'與'p.join()'有很大不同。 – ShadowRanger

回答

0

Process給你一個額外的線程(這與你的主進程,給你兩個進程)。在每個循環結束時調用join將等待該過程在開始下一個循環之前完成。如果您堅持使用Process,則需要將返回的進程(可能位於列表中)存儲起來,並在當前循環之後的循環中加入每個進程。

你想從multiprocessinghttps://docs.python.org/2/library/multiprocessing.html#module-multiprocessing.pool)的Pool