使用 Dask 分布式,函数如何自省以了解它是 运行 作为分布式未来还是作为 "normal" 函数?

Using Dask distributed, how can a function introspect to know if it's running as a distributed future or as a "normal" function?

我正在使用 Dask Distributed 通过 client.submit 接口向我的集群提交函数。如果集群不可用,我默认使用串行、非分布式执行。我希望能够从函数中确定它是 运行 作为分布式未来还是作为普通函数。

例如,对于下面的 work 函数,我想知道它是 运行 通过 client.submit(work) 还是简单地作为 work().

def work():
    if is_distributed():
       # do stuff
    else:
       # do different stuff

上面 is_distributed() 应该是什么样子?

您应该使用函数distributed.worker.get_worker。它将 return worker 实例,或引发 ValueError。 所以你可以做类似

的事情
def is_distributed()():
    import distributed.worker
    try:
        get_worker()
        return True
    except ValueError:
        return False