2016-08-31 5 views
1

空のリストmy_listと5つのプロセスpr1, pr2, pr3, pr4, pr5があり、それぞれが自分のリストに何かを追加するとしましょう。複数のプロセスでの相互リスト

私の質問です:このようなものがありますか?それが正常に動作するか、エラーが発生しますか?

+1

それぞれのプロセスには独自のメモリがあるため、不可能と思います。この操作にキューを使用する必要があります –

答えて

1

5つのすべてのプロセスが同じ機能を適用していますが、異なる入力に適用されていますか?この場合、その後multiprocessingからPool.map()を使用することが適切である:

from multiprocessing import Pool 

n_processes = 5 #number of processes to use 
input = [0.,1.,2.,3.] #some input 

def f(x): 
    #the function being applied on each thread 
    return x**2. #for example 

p = Pool(n_processes) 
my_list = p.map(f,input) 
p.close() #close the pool now you're finished with it 

したがって、関数f(x)は、各工程で異なる入力に適用され、その後、出力はと(等価リストに集められますあなたの 'my​​_list'は最初は空でした)。出力配列は、入力配列と同じ方法で並べられます。つまり、input = [x1,x2,x3,x4,x5]ならばoutput=[f(x1),f(x2),f(x3),f(x4),f(x5)]の場合です。

+0

私はやって終わった後、私は彼らを閉じて/彼らと何かをすると思いますか? – SnuKies

+0

申し訳ありません。終了したら、 'p.close()'と書くでしょう。 –

+0

なぜか分かりませんが、プログラムを実行するたびにコンピュータがフリーズします。あなたはそれを見ていただけますか? – SnuKies

1

これらのプロセスが独立している場合、このようなことはできません。少なくともソケットのようないくつかの追加の機構がなくてはなりません(複雑性が大幅に増加します)。

これらがmultiprocessingで作成され、my_listがリストである場合、各プロセスはリストの独自のコピーを持ちます。

multiprocessing.Queueと定義すると、実際にはプロセス間で共有構造になります。

+0

しかし、もし私のプロセスがそれぞれのリストを返すならば、必要なリストのすべてを連結することができますか? – SnuKies

+0

@SnuKies通常、プロセスは何も返しません。それは単に実行を終了します。しかし、Pythonはそれを可能にするきちんとした抽象化をしています。あなたは 'multiprocessing.map'について話していますか?私は確信していない、試してみてください。 – freakish

+0

私は 'マルチプロセッシング 'が本当に新しいです。 現在、私は 'マルチプロセッシング 'を使って複数のコンポーネントをインストールしているプロジェクトに取り組んでいます。前回インストールしたときから変更したコンポーネントと変更しなかったコンポーネントを、'マルチプロセッシング'で変更できたと思いました。 – SnuKies

関連する問題