2016-04-25 4 views
0

私はマスタースレーブアーキテクチャでmultiprocessingの代わりにipyparallelを統合しようとしています。マスターの奴隷からの結果のためipyparallelクラスタでキューを共有する

  • マスターからスレーブへのタスクのための一つの
  • ワン:

    はすなわち、現在、すべてのプロセスは、2つのキューを持っています。

現時点では、私はmultiprocessing.Manager().Queue()の通信用のキューを使用しています。しかし、彼らはプロセスのipyparallelと共有することはできないようです。

私はこれを(そして単に関数を介してではなく)これを行う理由は、作業者をゼロから「設定する」ことは、計算を実行するのと同じくらい高価である(計算上)ためです。私は、労働者の環境を設定し、最初の計算を実行し、結果のキューに結果をプッシュし、次にタスクキューから(かなり小さい)更新をフェッチして繰り返します(map_asyncなどを介して)停止するまでの最後の2つのステップ(再び、キューを介して)。

このようなタスクのためのより良いアプローチ/フレームワーク(ただし、Pythonでなければならない)があれば、私はすべて耳にします。

おかげIPython平行な

答えて

2

は、その後、負荷分散されたビューに渡される関数としてその設定に依存小さなタスクを配布し、DirectViewで「設定」を行うのが一般的です。 ipp.Referenceを使用して

dview.execute("data = setup()") 

は、あなたが今、あなたの仕事でそれに頼ることができます:

import ipyparallel as ipp 

rc = ipp.Client() 
dview = rc[:] 
lbview = rc.load_balanced_view() 

を直視して、セットアップを実行します。

def task(data): 
    analyze(data) 

rdata = ipp.Reference('data') 
ar = view.apply(task, rdata) 
result = ar.get() 

は、クライアントとビューを設定します

このようにして、どこからでもセットアップを実行し、次に依存するタスクを実行することができますロードバランシング方式でセットアップします。

関連する問題