2016-11-06 10 views
0

私はPythonマルチプロセッシングを初めて使いました。いくつかの並列計算を実装しようとしています。 .join()pは、次のいずれかを開始する前に終了するまで待機するようにループが発生するためPythonマルチプロセッシング - Parrallelプロセス

#M is an integer, contains the number of processes I'd like to launch. 
results = [] 
for i in range(0, M): 
     p = Process(target=processchild, args=(data[i],q)) 
     p.start() 
     result.append(q.get()) 
     p.join() 

、まだシーケンシャルである:私は、これはという情報を持っています。私は...あなたが(リストに格納し、それを反復することにより、例えば)あなたのforループの外で個別にあなたのプロセスに参加したいと思うどちらか

こと、答えに

hereを読みました私は

results = [] 
for i in range(0, M): 
     processes[i] = Process(target=processchild, args=(data[i],q)) 
     processes[i].start() 
     result.append(q.get()) 

for i in range(0, M): 
     processes[i].join() 

に自分のコードを変更したい場合

だから、実際に今、並列に実行しませんか?そうでない場合は、どうすればそのように動作するようにコードを変更できますか?私は前にリンクした質問への回答としてnumpy.Poolapply_asyncを使用して解決策を読んだので、これらを使用しないソリューションにほとんど関心があります。

+0

が正しいとします。 'M'プロセスが実際に同時に実行されていることをシステムツールで確認する必要があります。 –

答えて

0

はい、これは並行して実行されます。

すべてのプロセスは、結合する前に開始されるため、最初のプロセスの後でブロックされません。

+1

いいえ、 'q.get'ウィルブロック – robyschek

+0

@robyschek' join() 'の後に2番目のループに' q.get() 'を追加できますか?正しい並列実行を意味しますか? –

+1

@lte__ええ、それは正しい方法です。 – robyschek

関連する問題