如何获取进程的返回值

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

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

问题相关代码,请勿粘贴截图
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这两个返回值。

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

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()


multiprocessing提供了进程间共享数据的两个工具:multiprocessing.Value和multiprocessing.Array,前者用于单值共享,后者用于数组共享。如有兴趣,可参考拙作《Python高手修炼之道》一书,下面是书中关于进程间共享内存的例子。

# -*- coding: utf-8 -*-

"""
3.9.3 进程间通信——共享内存
"""

import os, time
import multiprocessing as mp

def sub_process_A(flag, data):
    """A进程函数"""
    
    while True:
        if flag.value == 0: # 若标志为0
            time.sleep(1)
            for i in range(len(data)): # 共享数组各元素加2
                data[i] += 2
            flag.value = 1 # 置标志为1
            print([item for item in data])

def sub_process_B(flag, data):
    """B进程函数"""
    
    while True:
        if flag.value == 1: # 若标志为0
            time.sleep(1)
            for i in range(len(data)):
                data[i] -= 1 # 共享数组各元素减1
            flag.value = 0 # 置标志为0
            print([item for item in data])

if __name__ == '__main__':
    print('主进程(%s)开始,按回车键结束本程序'%os.getpid())
    
    flag = mp.Value('i', 0) # flag类型是ctypes.c_long,不是普通的int
    data = mp.Array('d', range(5))
    
    p_a = mp.Process(target=sub_process_A, args=(flag, data))
    p_a.daemon = True
    p_a.start()
    
    p_b = mp.Process(target=sub_process_B, args=(flag, data))
    p_b.daemon = True
    p_b.start()
        
    input()