空のリストmy_list
と5つのプロセスpr1, pr2, pr3, pr4, pr5
があり、それぞれが自分のリストに何かを追加するとしましょう。複数のプロセスでの相互リスト
私の質問です:このようなものがありますか?それが正常に動作するか、エラーが発生しますか?
空のリストmy_list
と5つのプロセスpr1, pr2, pr3, pr4, pr5
があり、それぞれが自分のリストに何かを追加するとしましょう。複数のプロセスでの相互リスト
私の質問です:このようなものがありますか?それが正常に動作するか、エラーが発生しますか?
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)]
の場合です。
これらのプロセスが独立している場合、このようなことはできません。少なくともソケットのようないくつかの追加の機構がなくてはなりません(複雑性が大幅に増加します)。
これらがmultiprocessing
で作成され、my_list
がリストである場合、各プロセスはリストの独自のコピーを持ちます。
をmultiprocessing.Queue
と定義すると、実際にはプロセス間で共有構造になります。
しかし、もし私のプロセスがそれぞれのリストを返すならば、必要なリストのすべてを連結することができますか? – SnuKies
@SnuKies通常、プロセスは何も返しません。それは単に実行を終了します。しかし、Pythonはそれを可能にするきちんとした抽象化をしています。あなたは 'multiprocessing.map'について話していますか?私は確信していない、試してみてください。 – freakish
私は 'マルチプロセッシング 'が本当に新しいです。 現在、私は 'マルチプロセッシング 'を使って複数のコンポーネントをインストールしているプロジェクトに取り組んでいます。前回インストールしたときから変更したコンポーネントと変更しなかったコンポーネントを、'マルチプロセッシング'で変更できたと思いました。 – SnuKies
それぞれのプロセスには独自のメモリがあるため、不可能と思います。この操作にキューを使用する必要があります –