【发布时间】:2020-04-03 22:47:05
【问题描述】:
全部。我正在使用 Dask 分布式集群在循环内编写 Zarr+Dask 支持的 Xarray 数据集,而 dataset.to_zarr 正在阻塞。当有散乱的块阻塞循环的继续时,这确实会减慢速度。有没有办法异步执行.to_zarr,以便循环可以继续下一个数据集写入,而不会被一些散乱的块阻碍?
【问题讨论】:
标签: dask python-xarray zarr
全部。我正在使用 Dask 分布式集群在循环内编写 Zarr+Dask 支持的 Xarray 数据集,而 dataset.to_zarr 正在阻塞。当有散乱的块阻塞循环的继续时,这确实会减慢速度。有没有办法异步执行.to_zarr,以便循环可以继续下一个数据集写入,而不会被一些散乱的块阻碍?
【问题讨论】:
标签: dask python-xarray zarr
使用分布式调度程序,您无需任何特别努力即可获得异步行为。例如,如果您正在执行arr.to_zarr,那么您确实会等待完成。但是,您可以执行以下操作:
client = Client(...)
out = arr.to_zarr(..., compute=False)
fut = client.compute(out)
这将返回一个未来,fut,其状态反映了整个计算的当前状态,您可以选择是等待它还是继续提交新工作。您还可以将其显示到进度条(在笔记本中),该进度条将在内核不忙时异步更新。
【讨论】:
client.submit 帮助我找到了相关文档:distributed.dask.org/en/latest/…。