2017-02-21 7 views
1

私はipythonで並列計算を学習しています。私はdview.applyが呼び出されたとき、それはすべてのクライアントのための引数の同じセットを渡し、上記のコードでipython並列クライアントに異なる引数を渡す

from ipyparallel import Client 

rc = Client() 
rc.block = True 
print(rc.ids) 

def mul(a,b): 
    return a*b 

dview = rc[:] 
print(dview.apply(mul, 5, 6)) 
print(rc[0].apply(mul, 5, 5)) 
print(rc[1].apply(mul, 5, 9)) 

、例に出くわしました。私は別々に各顧客に電話することを学びました。しかし、クライアントがデータ集約型のタスクを実行する場合は、dview.applyによって異なる引数を渡す方法があります。これは、むしろ並列計算を行う点です。

他の方法がない場合、個々のクライアントが呼び出されたときに最初のクライアントからの結果を待つのではなく、タスクが並行して実行されるように、各クライアントを非同期に呼び出すことができますか?一般的に

答えて

1

並列計算を使用すると、引数の順序を渡すマップとして表現することができ、:

dview = rc[:] 
inputs = [6, 5, 9] 
results = dview.map(mul, [5] * len(inputs), inputs) 

我々は、各クライアントの呼び出しは非同期

はい、あなたが使用することができますを行うことができますview.apply_async結果に対応するFutureを返す:

ar = view.apply_async(mul, 5, 6) 
result = ar.get()