为了账号安全,请及时绑定邮箱和手机立即绑定

恢复传递给 multiprocessing.Process 的函数的返回值的最快方法

恢复传递给 multiprocessing.Process 的函数的返回值的最快方法

至尊宝的传说 2021-07-16 18:32:35
我有一个繁重的批处理工作,所以我把它切成 30 个(我的 CPU 数量)小批量,我做了 30 个multiprocessing.Process来做它们(出于某种原因我没有使用multiprocessing.Pool)。对于返回值,我使用了 30 multiprocessing.Queue。这是我的代码的概述:    def minibatch(q, data, i):        do_some_work_data_i        q.put(return_value)    if __name__ == '__main__':        q1 = Queue()        p1 = Process(target=minibatch, args=(q1, data[1], 1))        p1.start()        q2 = Queue()        p2 = Process(target=minibatch, args=(q2, data[2], 2))        p2.start()        first_return_value = q1.get()        second_return_value = q2.get()        p1.join()        p2.join()现在,我发现它太慢了!如果每个小批量需要 10 秒,我希望我的代码运行大约需要 10 秒,但它需要更多。那我应该怎么做呢?
查看完整描述

1 回答

?
森栏

TA贡献1810条经验 获得超5个赞

运行时顺序

processing time * number of runs

运行时并行

(processing time) * (number of runs / number of parallel processes) + (process start overhead * number parallel processes)

如果开始时您的处理时间不长,那么创建新流程的开销将超过您从并行性中获得的节省。

如果您的顺序批处理需要大约 300 秒,那么您的并行实现可能只需要 <11 秒,但如果您的顺序批处理只需要 10 秒,那么在 30 个进程上运行它实际上可能需要更长的时间。


查看完整回答
反对 回复 2021-07-28
  • 1 回答
  • 0 关注
  • 200 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信