从其他 dask 延迟函数中调用 dask 延迟函数

时间:2021-05-01 16:07:06

标签: python dask dask-delayed

根据此处的文档,我知道这是一个“禁忌”:https://docs.dask.org/en/latest/delayed-best-practices.html#avoid-calling-delayed-within-delayed-functions

但是,听我说完。我想我想要做的应该很容易。 我有这个工作代码:

from dask import delayed, compute, visualize

@delayed
def a():
    return 1

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

@delayed
def c(x):
    return x / 2

if __name__ == '__main__':
    final = c(b(a()))          # Note the nesting
    visualize(final)

它产生以下正确的可视化:

img

所以我想要做的就是生成完全相同的可视化,但我想将我的代码更改为只有一个像这样的顶级调用:

if __name__ == '__main__':
    final = c()            # Only the top-level call to c() now
    visualize(final)

如果可能的话,我想保持 a() 和 b() 的签名大致相同,这就是为什么我要问如何嵌套延迟函数。好像a()必须从b()调用,b()必须从c()调用?

正如所指出的,只要我不从延迟内部调用延迟,我就可以嵌套:

@delayed
def a():
    return 1

def b():
    return 1 + a()

def c():
    return b() / 2

if __name__ == '__main__':
    final = c()
    visualize(final)
    print(compute(final))

但这会产生不同的可视化效果:

img

0 个答案:

没有答案