如何递归计算延迟收集

How to recursively compute Delayed in collection

我是新用户,延迟试用。我想使用 delayed 来自动将函数和代码转换为 Delayed。但是,我发现 delayed.compute 没有递归计算延迟收集...

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]