SunnyEdward 2022-03-25 09:27 采纳率: 75%
浏览 51
已结题

如何获取进程的返回值

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

我想使用多进程来处理并行工作,但是不知道如何获取进程的返回值。
我需要保存这些返回值用于后续的处理。

问题相关代码,请勿粘贴截图
from multiprocessing import Process

def run1(N):
    trajlen1 = np.empty(shape=(0, 1))
    etaODAVG1 = np.empty(shape=(0, 1))
    for i in N:
        trajOD, etaODavg = traj_judge(link_start[i], link_start5, link_end[i], link_end5, eta2)
        if len(trajOD) == 1:
            etaODavg1 = simple_eta1[i]
        else:
            etaODavg1 = etaODavg
        etaODAVG1=np.append(etaODAVG1, [[etaODavg1]], axis=0)
        trajlen1=np.append(trajlen1, [[len(trajOD)]], axis=0)
        print('write:', i, 'trajlen:',len(trajOD),'etaODAVG',etaODavg1,'simpale_eta:', simple_eta1[i], 'eta1:', eta1[i])
    return etaODAVG1,trajlen1

def main():
    p1=Process(target=run1,args=(l2[0],))
    p1.start()
    p1.join()
    
if __name__ == '__main__':
    main()

我想要达到的结果

我需要在main()中获取并保存etaODAVG1,trajlen1这两个返回值。

  • 写回答

2条回答 默认 最新

  • 唯羽 2022-03-25 09:37
    关注

    用进程池吧,还能控制并发量,多香

    from concurrent.futures import ProcessPoolExecutor, wait
    
    
    def run1(num):
        return num, num - 1
    
    
    def main():
        pool = ProcessPoolExecutor(max_workers=10)
        process = []
        for i in range(10):
            p = pool.submit(run1, i)
            process.append(p)
        wait(process)
        for p in process:
            r1, r2 = p.result()
            print(r1, r2)
    
    
    if __name__ == '__main__':
        main()
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 4月8日
  • 已采纳回答 4月1日
  • 创建了问题 3月25日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部