dask延迟了计算调用的纯函数

时间:2018-06-15 18:06:24

标签: python dask

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},)

0 个答案:

没有答案