首页 > 解决方案 > skimage.util.apply_parallel 未按预期运行

问题描述

我正在尝试平铺图像并将计算并行应用于每个平铺。但它的行为不像我预期的那样。每当执行该功能时,我都会将其打印为“此处”,并且许多打印得很快,这表明它们正在同时启动。但是我的任务管理器中的 cpu 负载从未超过 100%,并且执行需要很长时间。有人可以建议吗?这是我第一次使用使用 Dask 的 skimage.util.apply_parallel。

from numpy import random, ones, zeros_like
from skimage.util import apply_parallel

def f3(im):
    print('here')
    for _ in range(10000):
        u=random.random(100000) 

    return zeros_like(im)

if __name__=='__main__':

    im=ones((2,4))

    f = lambda img: f3(img)
    im2=apply_parallel(f,im,chunks=1)

标签: pythondaskscikit-image

解决方案


我查看了源代码,apply_parallel 依赖于这个 Dask 命令:

 res = darr.map_overlap(wrapped_func, depth, boundary=mode, dtype=dtype)

但是我发现它最后需要.compute('processes')保证多个cpu。所以现在我只是使用 Dask 本身:

import dask.array as da
im2 = da.from_array(im,chunks=2)
proc = im2.map_overlap(f, depth=0).compute(scheduler='processes')

然后cpu使用率真的跳了!


推荐阅读