Caching dask缓存延迟函数示例
一个简单的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
这个例子表明情况并非如此
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