Dask 在分布式衍生函数内部调用dark时丢失本地客户端

Dask 在分布式衍生函数内部调用dark时丢失本地客户端,dask,Dask,我试图在一个函数中执行一些任务操作,该函数通过分布式系统发送给一个工作者。下面是代码的简化版本 client = Client(...) X_ = dask.array.from_array(...) X = dask.persist(X_) def func(X, b): with distributed.local_client() as c: with dask.set_options(get=c.get): return

我试图在一个函数中执行一些任务操作,该函数通过分布式系统发送给一个工作者。下面是代码的简化版本

client = Client(...)
X_ = dask.array.from_array(...)
X = dask.persist(X_)
def func(X, b):
     with distributed.local_client() as c:
           with dask.set_options(get=c.get):
                 return dask.lu_solve(X, b)

client.persist(dask.do(func)(X, b))
问题是,在对多个
X
b
实例执行操作时,有时它会工作,有时我会遇到异常
Exception:Client not running。状态:已关闭


知道如何解决这个问题吗?

当您将输入dask.array
X
b
传递给dask.delayed函数时,它们作为numpy数组到达。我建议只使用NumPy函数

或者,也许你正试图完成其他事情


如果您想在dask.array上调用dask.array函数,可以在正常的python会话中进行。没有理由使用
本地\u客户端

谢谢您的快速回答!对于这种设计,我有几个原因:1)矩阵
X
非常大(10s的GB);2)我实际的
func
函数的复杂度比玩具示例略大*并且它将在各种
X
实例中重复,因此我使用dask/distributed来尴尬地并行化问题的这一部分。我是否达到了普通dask用例的极限?(*实际上
func
是一个类的
\uuuu init\uuuu
,该类在dask数组上执行计算,然后保存其中的一些以便进一步计算。)您需要考虑如何跨分布式数组并行化函数
f
。Dask不会为您深入了解自定义代码。您可能需要查看map_块或dask.delayed。