2013-03-05 103 views
2

所以我拿了下面的代碼,運行它,並沒有發生任何事情。 Python的行爲就像它已經完成了一切(也許它已經完成),但沒有任何打印。任何幫助獲得這項工作將不勝感激!python multiprocessing根本不工作

import multiprocessing 

def worker(number): 
    print number 
    return 

if __name__ == '__main__': 
    test = multiprocessing.Process(target=worker, args=[0,1,2,3,4]) 
    test.start() 

回答

4

您的代碼實際上應該會導致錯誤。 multiprocessing.Process()args參數不會爲每個參數打開一個進程,它只是將列表中的參數提供給一個函數,然後在子進程中調用該函數。要運行這樣的5種獨立的情況下,你會做這樣的事情:

import multiprocessing 

def worker(number): 
    print number 
    return 

if __name__ == '__main__': 
    procs = [] 

    for i in range(5): 
     procs.append(multiprocessing.Process(target=worker, args=[i])) 

    [proc.start() for proc in procs] 
+0

好吧,我只是試過這個代碼,它也剛剛返回,沒有打印任何東西。不知道爲什麼。 – user2137871 2013-03-05 23:58:29

+0

你在使用什麼操作系統?你如何運行程序(IDLE,python命令後跟包含源代碼的文件的名稱等)?我使用Python 2.7.3在Ubuntu 12.04上運行該代碼,並按預期打印數字。 – 2013-03-06 00:01:32

+1

可以在命令行下正常工作,閒置時不做任何事情! – andsoa 2013-03-06 01:34:51

0

你的代碼試圖在新的進程中運行worker(0,1,2,3,4)。如果你想在多進程並行執行worker()功能:在錯誤

from multiprocessing import Pool 

def worker(number): 
    return number*number 

if __name__ == '__main__': 
    pool = Pool() # use all available CPUs 
    for square in pool.imap(worker, [0,1,2,3,4]): 
     print(square) 
0

你的代碼,結果當我運行它。由於使用逗號分析參數,因此您需要指定整個數組由單個參數組成。

import multiprocessing 

def worker(number): 
    print number 
    return 

if __name__ == '__main__': 
    test = multiprocessing.Process(target=worker, args=([0,1,2,3,4],)) 
    test.start() 
    test.join() 

此外,不要忘了加入最後的過程。