2017-02-23 9 views
2

を使用するプロセスの数を指定するには、遅延使用DASKは、ここでは一例として、単純なものであり、私は計算を行うための機能を持っている機能のリストを構築するが、

def add(a,b): 
    return a+b 

そして私は、この関数を実行します

output = [delayed(add)(i,i+1) for i in range(100)] 
compute(*output) 

私の質問は上記のコードは100プロセスを開始しますか?もしそうなら、それはプロセスを開始する時間を短縮するために、10プロセスと言うことを開始する方法はありますか?

答えて

2

dask delayedのデフォルトのgetは、コアを持つスレッドと同じ数のスレッドプールです。

get(スレッド化ではなく)を使用し、getのパラメータをcomputeで指定することもできます。 10スレッドのスレッドプールを使用するには、dask.compute(*output, num_workers=10)があります。 multiprocessingモジュールを使用するには、10人の作業者を使用してください。dask.compute(*output, get=dask.multiprocessing.get, num_workers=10)があります。 (dask.multiprocessingが基づいているマルチプロセッシングモジュールは、stdlibの中で最大の宝石ではないことに注意してください.Daskの使用はおそらくめったにありませんが、 daskとの並列性、私はを、単一のホストであっても素早く使用するでしょう)

2

デフォルトスケジューラは、マシン上に論理コアを持つスレッド/プロセスと同じ数のスレッドプールまたはプロセスプールを起動します(これは設定可能ですが)。 Daskはあなたのタスクと同じくらい多くのプロセスをスピンアップしません。あなたが示唆するように、これは非常に非効率的です。

Daskのスケジューラについては、this doc pageで詳しく知ることができます。

関連する問題