Caching dask缓存延迟函数示例

Caching dask缓存延迟函数示例,caching,dask,Caching,Dask,一个简单的dask缓存示例。缓存未按预期工作。让我们假设我们有一个数据列表和一系列延迟函数,对于遇到相同输入的函数,根据缓存分数缓存/记忆结果。 这个例子表明情况并非如此 import time import dask from dask.cache import Cache from dask.diagnostics import visualize from dask.diagnostics import Profiler, ResourceProfiler, CacheProfiler

一个简单的dask缓存示例。缓存未按预期工作。让我们假设我们有一个数据列表和一系列延迟函数,对于遇到相同输入的函数,根据缓存分数缓存/记忆结果。
这个例子表明情况并非如此

import time
import dask
from dask.cache import Cache
from dask.diagnostics import visualize
from dask.diagnostics import Profiler, ResourceProfiler, CacheProfiler    

def slow_func(x):
    time.sleep(5)
    return x+1

output = []
data = np.ones((100))
for x in data:
    a = dask.delayed(slow_func)(x)
    output.append(a)
total = dask.delayed(sum)(output)

cache = Cache(2e9)
cache.register() 

with Profiler() as prof, ResourceProfiler(dt=0.25) as rprof,CacheProfiler() as cprof:
    total.compute()

visualize([prof, rprof, cprof])  


在函数的初始并行执行之后,在调用具有相同值的函数以使用缓存版本时,将期望下一次迭代。但显然不是这样,dask_key_name用于指定相同的输出,但我想针对各种输入评估此函数,如果看到相同的输入,则使用缓存版本。由于5秒的延迟,我们可以判断这个函数是否很容易发生这种情况,并且应该看到它在执行后缓存第一个值大约5秒后执行。此示例执行每一个延迟5秒的函数。我可以直接使用cachey库创建一个记忆版本,但是使用dask.cache库应该可以

在dask.delayed中,您可能需要指定
pure=True
关键字

您可以验证这是否有效,因为所有dask延迟值都将具有相同的键

如果它们都在同一个
dask.compute
调用中,则不需要为此使用
Cache