用dask.delayed(.., pure=True)
包装函数创建具有相同散列的延迟对象。这意味着包装函数只被调用一次,其返回值在compute
调用中重新使用。
第二次调用compute
时,缓存的值会丢失,所有内容都会重新计算。这正是我想要的行为。下面的代码示例。
问题是,如果这种行为得到更大规模的保证吗?假如我在网络服务中使用distributed.Client
来计算d_res
。因此,当收到100个并发请求时,compute
会调用random.random
100次(每compute
次调用一次)或某些结果可能会重新使用?如果是这样,如何防止请求之间重复使用结果?
import random
import dask
d_random1 = dask.delayed(random.random, pure=True)()
d_random2 = dask.delayed(random.random, pure=True)()
print(d_random1, d_random2)
# Delayed('random-efe059eb022c973bffd2993d31362293') Delayed('random-efe059eb022c973bffd2993d31362293')
d_res = {'rand1': d_random1, 'rand2': d_random2}
print(dask.compute(d_res))
# ({'rand1': 0.1264109002207251, 'rand2': 0.1264109002207251},)
print(dask.compute(d_res))
# ({'rand1': 0.5828312446169945, 'rand2': 0.5828312446169945},)