-1

當我試圖運行的代碼:python多重處理在後端如何工作?

import multiprocessing 

def worker(): 
    """worker function""" 
    print 'Worker' 
    return 

if __name__ == '__main__': 
    jobs = [] 
    for i in range(5): 
     p = multiprocessing.Process(target=worker) 
     jobs.append(p) 
     p.start() 

輸出是空白和不打印「工人」簡單地執行。如何在多處理中打印所需的輸出?
使用多處理時實際發生了什麼?
我們可以用於多處理的最大內核數量是多少?

+1

在我的電腦上,您的測試會打印五次「工作人員」。你在使用什麼操作系統? –

+1

你是以腳本還是交互模式運行它?如果您在開始所有流程後加入流程,會發生什麼情況? – user2357112

+0

我使用的是windows-10和python 2.7.9 – dinece

回答

0

我爲我的部分打印了5次「Worker」,你在Python 3上嗎?如果是這種情況,你使用print("Worker")。從我的實驗中,我認爲多線程並不意味着使用多核,它只是爲了確保並行性而運行不同的胎面。嘗試閱讀多處理lib文檔以獲取更多信息。

+0

我使用python 2.7.9我提到了多處理不是多線程。在多處理文檔中,它給出瞭如何使用該模塊,但沒有如何在後端工作 – dinece

+0

它可能會通知您http://stackoverflow.com/questions/3044580/multiprocessing-vs-threading-python我不知道爲什麼你不'不要打印它。 – user5698387

+0

我試過它比我的核心數量更多,而且它不會被再次清晰地打印出來 – user5698387

1

我已經在Windows 7,Cygwin和Ubuntu上試過了你的代碼。對於我來說,所有的線程在循環結束之前完成,因此我得到所有要顯示的打印,但使用join()將保證所有線程都會完成。

import multiprocessing 

def worker(): 
    """worker function""" 
    print 'Worker' 
    return 

if __name__ == '__main__': 
    jobs = [] 
    for i in range(5): 
     p = multiprocessing.Process(target=worker) 
     jobs.append(p) 
     p.start() 

    for i in range(len(jobs)): 
     jobs.pop().join() 

至於如何multiprocessing工作在後臺,我打算讓更有經驗的人比我回答這個問題:)我可能只是讓自己出醜。

+0

'join'不是必須的,除非你讓子進程守護進程。當主腳本退出時,'multiprocessing'會加入非deamon進程。 – robyschek

+0

是的,你是絕對正確的,''join''不是必需的,但是原始代碼適用於我和其他人,所以也許Win10對進程有些奇怪。我的「答案」更多的是評論:) –

+1

@robyschek我沒有看到這在文檔中,這是否總是保證是真的? –