python多进程处理数据集图片

问题遇到的现象和发生背景

使用python多进程处理一个数据集,处理函数是 对每张图片进行加噪并保存

问题相关代码,请勿粘贴截图
img_paths = get_file_path(path1, path2)
    print("all:", len(img_paths))

    # 1.pool.map
    avi_cpu = os.cpu_count()-30
    print('there is {} cpu'.format(avi_cpu))
    pool = Pool(avi_cpu) # 当前可用cpu数量
    # pool.map_async(process_image, img_paths)
    res = []
    for img in img_paths:
        r = [pool.apply_async(process_image, (img,))]
        res.append(r)

    #2.该情况处理时处理图片的子进程会直接跳过

    # pool = Pool(100)
    # cpus = os.cpu_count()
    # print('there is {} cpu'.format(cpus))
    # 任务切分
    # splits = list(divide(cpus, img_paths))
    # for split in splits:
    #     pool.apply_async(process_image, args=(split,))

    pool.close()
    pool.join()
    end = time.time()
    print("deal data cost:", end - start)

运行结果及报错内容

正常情况下一个进程处理一张图片在几百秒以内,但使用上述1代码时在处理快结束的时候,最后几个处理进程会变得很慢,单个进程的用时会达到几千甚至上万秒。搞笑的是,我之前用同样的代码处理另一个数据集的时候完全正常,两个数据集的图片数不同,图片大小也存在差异

img

我的解答思路和尝试过的方法

pool.map
pool.map_async
pool.apply_async

还有chunksize的设置,我试过设为 文件总数/cpu数,开始效果就变的更慢一些

在使用2代码时,只会有主进程运行,跳过处理函数

我想要达到的结果

正常处理数据集,不会在最后几个进程停顿住

之前另一个数据集的数量应该比较少吧,尝试把img_paths分成几段,多次运行吧,
你这有几张图片就有几个进程,压力太大