如何查找dask.delayed任务的输入?

时间:2017-12-01 17:02:46

标签: python dask dask-delayed

给定dask.delayed任务,我想得到该任务的所有输入(父母)的列表。

例如,

from dask import delayed

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

def inc_list(x):
    return [inc(n) for n in x]

task = delayed(sum)(inc_list([1,2,3]))
task.parents ???

产生以下图表。我怎样才能让sum#3的父母产生一个[inc#1, inc#2, inc#3]的列表?

enter image description here

1 个答案:

答案 0 :(得分:1)

延迟对象不会存储对其输入的引用,但如果您愿意稍微深入挖掘任务图并手动重建延迟对象,则可以将其取回。

特别是,您可以使用延迟对象索引.dask属性'键

>>> task.dask[task.key]
(<function sum>,
 ['inc-9d0913ab-d76a-4eb7-a804-51278882b310',
  'inc-2f0e385e-beef-45e5-b47a-9cf5d02e2c1f',
  'inc-b72ce20f-d0c4-4c50-9a88-74e3ef926dd0'])

这显示了任务定义(请参阅Dask&#39; s graph specification

'inc-...'值是任务图中的其他键。您可以使用dask.core.get_dependencies函数

获取依赖项
>>> from dask.core import get_dependencies
>>> get_dependencies(task.dask, task.key)
{'inc-2f0e385e-beef-45e5-b47a-9cf5d02e2c1f',
 'inc-9d0913ab-d76a-4eb7-a804-51278882b310',
 'inc-b72ce20f-d0c4-4c50-9a88-74e3ef926dd0'}

如果您愿意,可以从此处制作新的延迟对象

>>> from dask.delayed import Delayed
>>> parents = [Delayed(key, task.dask) for key in get_dependencies(task.dask, task.key)]
[Delayed('inc-b72ce20f-d0c4-4c50-9a88-74e3ef926dd0'),
 Delayed('inc-2f0e385e-beef-45e5-b47a-9cf5d02e2c1f'),
 Delayed('inc-9d0913ab-d76a-4eb7-a804-51278882b310')]