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 的使用率真的飞跃了!
我正在尝试平铺图像并对每个平铺并行应用计算。但它的行为并不像我预期的那样。我让它在函数执行时打印 '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 的使用率真的飞跃了!