使用Dask compute会导致执行挂起

使用Dask compute会导致执行挂起,dask,dask-distributed,dask-delayed,Dask,Dask Distributed,Dask Delayed,这是我之前关于使用Dask computed to的一个问题的潜在答案的后续问题 为什么使用Dask compute会导致执行挂起? 以下是工作代码片段: #Suppose you created a scheduler at the ip address of 111.111.11.11:8786 from dask.distributed import Client import dask.array as da # client1 client1 = Client("111.111.

这是我之前关于使用Dask computed to的一个问题的潜在答案的后续问题

为什么使用Dask compute会导致执行挂起? 以下是工作代码片段:

#Suppose you created a scheduler at the ip address of 111.111.11.11:8786


from dask.distributed import Client
import dask.array as da

# client1
client1 = Client("111.111.11.11:8786")
x = da.ones(10000000, chunks=(100000,))  # 1e7 size array cut into 1e5 size chunks
x = x.persist()
client1.publish_dataset(x=x)

# client2
client2 = Client("111.111.11.11:8786")
x = client2.get_dataset('x')  #get the lazy collection x
result = x[0].compute() #code execution hangs here
print(result)

persist
的行为会有所不同,具体取决于分布式客户端是否处于活动状态。在您的例子中,在创建任何客户机之前调用它,结果是所有数据都打包到图形描述中。这种行为在线程调度程序上是正常的,在线程调度程序中,工作进程之间共享内存,但是当您发布时,您将整个内容发送到调度程序,显然它被阻塞了


如果先创建
client1
,您会注意到持久化发生得非常快(在这种情况下,调度程序只获取指向数据的指针),发布-获取周期将按预期工作。

持久化
的行为会有所不同,具体取决于是否有活动的分布式客户端。在您的例子中,在创建任何客户机之前调用它,结果是所有数据都打包到图形描述中。这种行为在线程调度程序上是正常的,在线程调度程序中,工作进程之间共享内存,但是当您发布时,您将整个内容发送到调度程序,显然它被阻塞了


如果先创建
client1
,您会注意到持久化发生得非常快(在这种情况下,调度程序只获取指向数据的指针),发布-获取周期将按预期工作。

Hi MDurant,当我在持久化之前定义client1时,仍然会出现延迟。为了保持一致性,我更新了上面示例中的代码。延迟是可以的-当您坚持时,您仍然在workers中创建数据-但是现在成功了吗?你的代码几乎可以在我的笔记本电脑上立即运行。我可以让它工作。我有两个问题。首先,我没有使用111.111.11.11:8786,而是使用tcp://111.111.11.11:8786. 其次,我没有为调度程序创建任何工作程序。有趣的是,在使用persist.Hi-MDurant之后定义客户端时,我能够让代码正常工作。当我在persist之前定义client1时,仍然会出现延迟。为了保持一致性,我更新了上面示例中的代码。延迟是可以的-当您坚持时,您仍然在workers中创建数据-但是现在成功了吗?你的代码几乎可以在我的笔记本电脑上立即运行。我可以让它工作。我有两个问题。首先,我没有使用111.111.11.11:8786,而是使用tcp://111.111.11.11:8786. 其次,我没有为调度程序创建任何工作程序。有趣的是,在使用persist后定义客户机时,我能够让代码正常工作。