如何查找Dask分布式函数调用的concurrent.future输入参数

如何查找Dask分布式函数调用的concurrent.future输入参数,dask,dask-distributed,Dask,Dask Distributed,我正在使用Dask将工作分配到集群。我正在创建一个集群,并调用.submit()向调度程序提交一个函数。它返回一个Futures对象。我试图弄清楚,一旦将来的对象完成后,如何获得它的输入参数 例如: from dask.distributed import Client from dask_yarn import YarnCluster def somefunc(a,b,c ..., n ): # do something return cluster = YarnClus

我正在使用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


未来只知道它在调度程序上唯一已知的密钥。在提交时,如果它有依赖项,则会暂时找到这些依赖项并发送给调度程序,但如果在本地保存,则不会复制

您所追求的模式听起来更像是
delayed
,它保持着图形,实际上
client.compute(delayed\u thing)
返回一个未来

d = delayed(somefunc)(a, b, c)
future = client.compute(d)
dict(d.dask)  # graph of things needed by d

您可以直接与调度程序进行通信,以找到某些键的依赖项,这些键通常也是键,因此可以对图形进行反向工程,但这听起来不是一条很好的路径,因此我不想在这里描述它。

未来不会保留它们的输入。不过你可以自己做

futures = {}
future = client.submit(func, *args)

futures[future] = args

有没有办法用
client.map()
做到这一点?