亦清尘 2022-07-22 13:04 采纳率: 0%
浏览 52
已结题

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代码时,只会有主进程运行,跳过处理函数

我想要达到的结果

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

  • 写回答

1条回答 默认 最新

  • 脚踏南山 2022-07-22 17:23
    关注

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

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月29日
  • 创建了问题 7月22日

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么