2017-09-26 99 views
1

我正在學習多處理模塊,並從互聯網上找到一些示例代碼。代碼相同但結果不同。請幫助 why my subprogram doesn't work ?當我使用多處理模塊時,爲什麼我的程序不工作

+0

@atru也許是因爲我不上最新與最新的Python,但執行等待所有線程的查殺過程對我來說前完成。它在開始消息的中間的某個地方打印結束消息,但它等待所有完成消息 – HyperNeutrino

+0

@HyperNeutrino確實,它不是'join()'。我刪除了我的評論。該程序適用於我 - 儘管在開始時打印了結束消息。 – atru

+0

@atru它是'join()'...它只是等待線程完成並殺死它,這使得結束消息打印在末尾 – HyperNeutrino

回答

2

我可以重現你的問題的唯一方法是,如果我設置的過程是惡魔的:

p1 = Process(target=piao, args=('a',)) 
p2 = Process(target=piao, args=('b',)) 
p3 = Process(target=piao, args=('c',)) 

p1.daemon = True 
p2.daemon = True 
p3.daemon = True 

p1.start() 
p2.start() 
p3.start() 

一個daemon線程將繼續從沒有退出阻塞主程序運行。在我的系統和Python(2.X)daemon默認爲False。但根據3.X文檔

如果提供,關鍵字只有守護參數設置進程守護 標誌設置爲True或False。如果無(默認),則此標誌將從創建過程繼承而來 。

這意味着在Windows上的Python Shell中有可能在沒有明確規範的情況下運行進程daemon

要改變這種要麼設置該標誌爲false:

p1.daemon = False 
p2.daemon = False 
p3.daemon = False 

具有調用start之前,但在Python 3.6的情況下,可以在命令中,你調用Process對象進行進行(見this )。

或者使用join

p1.daemon = True 
p2.daemon = True 
p3.daemon = True 

p1.start() 
p2.start() 
p3.start() 

p1.join() 
p2.join() 
p3.join() 

print "done" 
+0

哦,這是有道理的;太好了!我有一個upvote的詳細解釋;) – HyperNeutrino

+0

@HyperNeutrino謝謝你! :)在我放棄之後,它超越了我的想法:) – atru

相關問題