2016-11-04 10 views
0

私はデバイスの一覧を持っていますが、これはテストベッドによって異なる場合があります。ここに私は4つのノードを持っています:不明なリスト項目を使用して、同時にすべての項目を使用する関数を書くことはできますか?

node_list = [R1,R2,R3,R4] 

関数内で同時に4つの値を使うようにPythonコードを書くことはできますか?

現在、私はそれをテストベッドに固定し作っています:

R1 = node_list[0] 
R2 = node_list[1] 
R3 = node_list[2] 
R4 = node_list[3] 

我々はPCALL機能を持っているのは、私が呼び出しています関数はrun_command(rtr)であると言うの同時calls.Let実行するように定義します。

pcall([run_command],iargs=[R1,R2,R3,R4]) 

許可をすべての4つのノードがrun_command関数を同時に呼び出します。しかし、それは4つのノードに修正されています。

+1

をわからないあなたが何を意味するかが、あなたは来ました'map(run_command、node_list)'の向こうに? –

+0

@ Dr.V私は副作用を誘発するために 'map'を使うことを勧めます。 forループを使うだけです。 –

+0

@ Dr.V: 'map()'は並行しません。代わりに、 'multuprocessing.Pool.map()'は、関数呼び出しを並行して行います。 –

答えて

0

multuprocessing.Pool.map()が必要です。

map()組み込み関数の並列等価(それはしかし一つだけ反復可能な引数をサポートしています):ドキュメントから詳細。結果が準備完了するまでブロックされます。

このメソッドは、iterableをいくつかのチャンクに分割し、プロセスプールに別々のタスクとしてサブミットします。これらのチャンクの(おおよその)サイズは、chunkksizeを正の整数に設定することで指定できます。

サンプル例:

from multiprocessing import Pool 

def f(x): 
    return x*x 

p = Pool(5) 
print(p.map(f, [1, 2, 3])) 

が標準出力に出力します。また

[1, 4, 9] 

、およそチェック:multuprocessing.Pool.imap()を、multuprocessing.Pool.map_async()

+0

関数fに与えた入力のリストは、その場所に動的リストを持つことができます。私はここであなたが[1,2,3]を食べていることを意味しています、私たちは以前の機能の出力に依存するリストを持つことができます。私のa()は、リスト[10,24,1]を手動で値を変更せずにf(x)でこれを与えることができます。 –

+0

私は、Pythonに関連する基本的なチュートリアルに進み、オブジェクトの仕組みを練習することをお勧めします。私はそこにリストオブジェクトを渡しています、そして、それはどのソースからでも可能です。要するに、はい、あなたはそれを使うかもしれません。 '[1、2、3]'の代わりに 'a()'と書くと、 –

関連する問題