避免在 Dask 中重新计算相同的值?
Avoid recomputing same values in Dask?
我希望在下面的代码中,第一次计算需要 3 秒以上,而第二次计算要快得多。我应该怎么做才能避免对客户端重新计算?
(我之前曾搜索过这个问题的答案,关于 pure=True 但没有找到任何东西)
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
您需要在客户端使用persist
方法
foo_res = client.persist(foo_res)
这将在后台开始计算并将结果保存在内存中,只要对 foo_res
的某些引用在您的 Python 会话中
相关文档页面在这里:http://distributed.readthedocs.io/en/latest/manage-computation.html
我希望在下面的代码中,第一次计算需要 3 秒以上,而第二次计算要快得多。我应该怎么做才能避免对客户端重新计算? (我之前曾搜索过这个问题的答案,关于 pure=True 但没有找到任何东西)
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
您需要在客户端使用persist
方法
foo_res = client.persist(foo_res)
这将在后台开始计算并将结果保存在内存中,只要对 foo_res
的某些引用在您的 Python 会话中
相关文档页面在这里:http://distributed.readthedocs.io/en/latest/manage-computation.html