0

这是我之前关于使用 Dask 计算访问大数组中的一个元素的问题之一的潜在答案的后续问题。

为什么使用 Dask 计算会导致执行在下面挂起?这是工作代码片段:

#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)
4

1 回答 1

2

persist行为不同,具体取决于您是否有一个分布式客户端处于活动状态。在您的情况下,您在创建任何客户端之前调用它,结果是将整个数据打包到图形描述中。这种行为在线程调度程序上是可以的,其中内存在工作人员之间共享,但是当您发布时,您将整个事情发送到调度程序,显然它是窒息的。

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

于 2017-08-02T20:10:48.043 回答