Skip to main content
 首页 » 编程设计

python之避免在 Dask 中重新计算相同的值

2024年10月01日3JeffreyZhao

我希望在下面的代码中,第一次计算需要 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 

请您参考如下方法:

需要在Client端使用persist方法

foo_res = client.persist(foo_res) 

只要您的 Python session 中存在对 foo_res 的引用,这将在后台开始计算并将结果保存在内存中

相关文档页面在这里:http://distributed.readthedocs.io/en/latest/manage-computation.html