轻松的机会缓存(或其他方式)避免io的策略

时间:2019-11-17 16:25:38

标签: dask

我有一个问题,当索引到由3D tiffs文件夹构建的dask数组时,如何减少文件io的dask.delayed几乎完全as described in the docs,并且类似于dask-image :我的4D(tzyx)dask.array<stack, shape=(600, 65, 512, 512), dtype=uint16, chunksize=(1, 65, 512, 512), chunktype=numpy.ndarray>由一堆dask.delayed(skimage.io.imread)调用构成,这些调用读取3D tiff堆栈。

借助机会缓存,我可以在3D视图上最小化io事件(即多次调用stack[0].compute()只会读取tiff文件一次),但是如果我顺序地索引到该堆栈中如在更改z位置时所做的操作(例如stack[0,1].compute() ... stack[0,2].compute() ...)在不同的平面上,则z堆栈的每个“平面”都会产生新的读取。我想知道最好的解决方案是否是制作一个不同的dask.delayed图像读取器函数,该函数具有自己的简单缓存机制来重新传送最近读取的文件(例如,使用cachey.memoize) ,或者我是否通常可以更好地使用dask.array API来避免多次读取。

(为此,我的应用程序正在使用napari图像查看器工作)。

感谢任何建议!

1 个答案:

答案 0 :(得分:0)

我怀疑这是Dask的优化策略遇到的问题。我建议您在每种情况下都尝试.compute(optimize_graph=False),看看是否有帮助。