2017-09-26 5 views
1

マルチプロセッシングモジュールを勉強していて、インターネットからいくつかのサンプルコードを見つけました。 コードは同じですが結果は異なります。私は鬼神のようにプロセスを設定している場合 why my subprogram doesn't work ?マルチプロセッシングモジュールを使用しているときに私のプログラムが動作しない理由

+0

私は最新の最新のPythonではないだから@atruは、多分それはだが、実行は私のためのプロセスを殺す前に終了するすべてのスレッドを待ちます。 ..開始メッセージの途中で終了メッセージを印刷しますが、すべての終了メッセージを待ちます – 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にプロセスデーモン フラグを設定します。 None(デフォルト)の場合、このフラグは作成プロセスから継承された になります。

Windows上のPythonシェルで明示的な指定なしでdaemonというプロセスを実行する可能性があることを意味します。

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

startを呼び出す前に、しかし、Pythonの3.6の場合に行う必要がありthisを参照してください(あなたがProcessオブジェクトを呼び出すコマンドで行うことができます。このどちらかの設定をfalseにフラグを変更するには

)。

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

関連する問題