DASK延迟和具有多个返回变量的模块



我想使用DASK中的延迟函数。不幸的是,我不清楚在具有多个返回值的模块上使用延迟函数。例如,如果我运行以下代码段,则在计算最终结果后,无法指出inc模块的第一个返回值。

from dask import delayed
from time import sleep
def inc(x):
sleep(1)
return x+1, x+2
def add(x, y):
sleep(1)
return x + y
x = delayed(inc)(1)
y = delayed(inc)(2)
z = delayed(add)(x[0], y[0])
print(z.compute())

正确地说,这个片段的结果如下。这表示定点正在工作。

(3, 5)

但是,我无法读取x return的值。

%%time
result=z.compute()
print('Result is :', result)
print(x[0])
output: 
Result is : 5
Delayed('getitem-f80cf501fe43d6cbd50e0bec71c91c12')
CPU times: user 7.46 ms, sys: 2.13 ms, total: 9.59 ms
Wall time: 2 s

如果由于依赖关系,延迟函数的返回值已经被计算出来,那么在不计算它们的情况下读取它们将是一件很好的事情。

默认情况下,Dask的compute方法返回具体结果,但清除所有中间结果。这对于需要大量内存的工作负载来说尤其重要。及时清理中间结果是很重要的。

如果要同时计算多个结果,请考虑dask.compute函数。

x, z = dask.compute(x, z)

最新更新