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

如何获取进程的返回值

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

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

问题相关代码,请勿粘贴截图
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 17: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月9日
  • 已采纳回答 4月1日
  • 创建了问题 3月25日

悬赏问题

  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法