2
次のコードでは、最初の計算には3 +秒が必要で、2番目の計算ははるかに高速になることが期待されます。クライアントに計算を再実行させないためにdaskを得るにはどうしたらよいですか? (私は以前に真=純粋について、この質問への答えを探していたし、何も見つかっていない)Daskで同じ値を再計算しないでください。
from dask import delayed, compute
from dask.distributed import Client
@delayed(pure=True)
def foo(a):
time.sleep(3)
return 1
foo_res = foo(1)
client = Client()
import time
t1 = time.time()
results = compute(foo_res, get=client.get)
t2 = time.time()
print("Time : {}".format(t2-t1))
t1 = time.time()
results = compute(foo_res, get=client.get)
t2 = time.time()
print("Time : {}".format(t2-t1))
出力:
Time : 3.01729154586792
Time : 3.0170397758483887
ああ、私は、ドキュメントを通してそれを行ってきましたが、それを見つけることができませんでした、ありがとう!私は実際にはオブジェクト参照に依存しないargs btwをどのようにハッシュするのが好きですが、データに固有です。非常に便利なライブラリ、ありがとう! – julienl
あなたが送った文書は、参照が残っている限り、 'persist'、' compute'などのどれもが動作することを示唆しています。 例: 'event foo_res_future = client.compute(foo_res)' 私のために働くようですね。 – julienl
正解ですが、 'dsk.compute'ではなく' client.compute'でなければなりません。歴史的な理由からそれらは異なっている。 – MRocklin