我正在使用Dask将工作分配到集群。我正在创建一个集群,并调用.submit()
将一个函数提交给调度程序。它返回一个Futures对象。我试图弄清楚一旦完成,该如何获取该未来对象的输入参数。
例如:
from dask.distributed import Client
from dask_yarn import YarnCluster
def somefunc(a,b,c ..., n ):
# do something
return
cluster = YarnCluster.from_specification(spec)
client = Client(cluster)
future = client.submit(somefunc, arg1, arg2, ..., argn)
# ^^^ how do I obtain the input arguments for this future object?
# `future.args` doesn't work
答案 0 :(得分:1)
将来只知道在调度程序上唯一已知的密钥。在提交时,如果有依赖关系,则会临时找到这些依赖关系并将其发送到调度程序,但如果保留在本地则不会复制。
您追求的模式听起来更像delayed
,它保持其图表,实际上client.compute(delayed_thing)
返回了未来。
d = delayed(somefunc)(a, b, c)
future = client.compute(d)
dict(d.dask) # graph of things needed by d
您可以直接与调度程序进行通信,以找到某些键的依赖关系,这些键通常也将是键,因此可以对图进行逆向工程,但这听起来并不理想,所以我不会尝试在这里描述它。
答案 1 :(得分:1)
期货不保留其输入。您可以自己做。
futures = {}
future = client.submit(func, *args)
futures[future] = args