根据此处的文档,我知道这是一个“禁忌”: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)
它产生以下正确的可视化:
所以我想要做的就是生成完全相同的可视化,但我想将我的代码更改为只有一个像这样的顶级调用:
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))
但这会产生不同的可视化效果: