Dask 如何递归计算集合中的延迟

Dask 如何递归计算集合中的延迟,dask,dask-delayed,Dask,Dask Delayed,我是一个尝试dask延迟的新用户。我想使用delayed自动将函数和代码转换为delayed。但是,我发现delayed.compute并没有在集合中递归计算delayed from dask import delayed, base @delayed def inc(x): return x + 1 @delayed def colls(ind): return [inc(i) for i in xrange(ind)] data2 = colls(2) data2.c

我是一个尝试dask延迟的新用户。我想使用delayed自动将函数和代码转换为delayed。但是,我发现delayed.compute并没有在集合中递归计算delayed

from dask import delayed, base

@delayed
def inc(x):
    return x + 1

@delayed
def colls(ind):
    return [inc(i) for i in xrange(ind)]


data2 = colls(2)
data2.compute() # I expect [1, 2], but get [Delayed('inc-...'),
 Delayed('inc-...')]

我是否遗漏了使其工作的任何东西,或者Dask.delayed不支持它?

您是正确的,您不应该在其他延迟函数中使用延迟函数(除非您正在做一些非常奇怪的事情)。但是,您可以将延迟值传递给其他延迟函数

在你的例子中,我认为colls没有延误。您希望它立即确定要进行多少延迟的
inc
调用。通常,您希望立即调用构建任务图的任何代码,并延迟任何只起作用的函数

from dask import delayed, compute

@delayed
def inc(x):
    return x + 1

def colls(ind):
    return [inc(i) for i in xrange(ind)]


data2 = colls(2)
compute(data2)
# [1, 2]

非常感谢。事实上,我想用dask.delayed做一些很酷很奇怪的事情。。。我想在代码库中添加delayed到包装器代码块,使Delayeds无处不在。。。然而,这是另一个话题。