我有一个功能
crop_images_circle(file_dir,kmeans_dir,folders_dir,filename)
。不会返回任何东西。
尝试使用 dask 并行化计算。
对大约 100 个奇怪的文件进行无 dask 的实现:
for filename in os.listdir(file_dir):
crop_images_circle(file_dir,kmeans_dir,folders_dir,filename)
执行时间(以秒为单位):53.58223843574524
用 dask 实现:
# Version 1
for filename in os.listdir(file_dir):
x = delayed(crop_images_circle)(file_dir,kmeans_dir,folders_dir,filename)
x.compute()
执行时间(以秒为单位):46.36917209625244
# Version 2
for filename in os.listdir(file_dir):
x = delayed(crop_images_circle)(file_dir,kmeans_dir,folders_dir,filename)
x.compute()
dask 的版本 2 仅处理一张图像。不知道为什么。文档确实提到了类似的用途, 所需的时间并没有那么显着的不同。使用 dask 有改进吗?或者我搞乱了语法?
版本 1 未成功并行化,因为调用
.compute()
时延迟函数立即执行。版本 2 删除除最后一个对象之外的所有延迟对象,因此仅处理最后一个图像。你需要收集所有延迟的对象并调用一次compute()
:
all_x = []
for filename in os.listdir(file_dir):
x = delayed(crop_images_circle)(file_dir,kmeans_dir,folders_dir,filename)
all_x.append(x)
dask.compute(all_x)