我正在尝试使用 dask.delayed 来构建任务图。这通常工作得很好,但我经常遇到这样的情况,我有许多延迟对象,这些对象有一个方法返回一个长度的对象列表,该长度不容易从我目前可用的信息中计算出来:
items = get_collection() # known length
def do_work(item):
# get_list_of_things returns list of "unknown" length
return map(lambda x: x.DoStuff(), item.get_list_of_things())
results = [delayed(do_work(x)) for x in items]
这给出了一个
TypeError: Delayed objects of unspecified length are not iterable
dask 有什么办法可以解决这个问题,最好不必在中间结果上调用 .compute() ,因为这会破坏拥有任务图的大部分好处?它基本上意味着在运行某些步骤之前无法完全解析图形,但唯一可变的是平行部分的宽度,它不会改变图形的结构或深度。