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