skimage.util.apply_parallel 未按预期运行

skimage.util.apply_parallel not behaving as expected

我正在尝试平铺图像并对每个平铺并行应用计算。但它的行为并不像我预期的那样。我让它在函数执行时打印 'here' ,并且许多打印很快,这表明它们正在同时启动。但是我的任务管理器中的 cpu 负载从未超过 100%,而且执行需要很长时间。有人可以建议吗?这是我第一次使用 skimage.util.apply_parallel,它使用 Dask。

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)

我看了源码,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 的使用率真的飞跃了!