多重处理返回多个值

时间:2020-05-12 14:45:45

标签: python parallel-processing multiprocessing

我正在尝试使用Multiprocessing.Process来计算一个接受两个参数并返回两个值的函数。作为简化示例,我尝试使用以下代码

import multiprocessing

# function to loop over
def my_func(x,y):
    return x+y, x-y

# worker function
def worker(procnum_1, procnum_2, x, y, return_dict):
    print("procnum_1: "+str(procnum_1)+", procnum_2: "+str(procnum_2))
    return_dict[procnum_1][procnum_2] = my_func(x[procnum_1],y[procnum_2])

if __name__ == '__main__':
    # lists to apply the function to
    x_list = [1,2,3,4,5,6,7]
    y_list = [11,12,13,14,15,16,17]

    manager = multiprocessing.Manager()
    return_dict = manager.dict()
    jobs = []
    for i in range(len(x_list)):
        for j in range(len(y_list)):
            p = multiprocessing.Process(target=worker, args=(i,j,x_list,y_list,return_dict))
            jobs.append(p)
            p.start()

    for proc in jobs:
        proc.join()
    # print the result
    print(return_dict.values())

但是,此函数返回一个空数组[]。此外,该代码不会在worker函数内部打印该行。我知道How to retrieve multiple values returned of a function called through multiprocessing.Process。答案利用了multiprocessing.Pool函数。我正在寻找使用multiprocessing.Process的答案。

1 个答案:

答案 0 :(得分:0)

尝试一下:

def worker(procnum_1, procnum_2, x, y, return_dict):
    print("procnum_1: "+str(procnum_1)+", procnum_2: "+str(procnum_2))
    if procnum_1 not in return_dict:
        return_dict[procnum_1] = {}
    return_dict[procnum_1][procnum_2] = my_func(x[procnum_1],y[procnum_2])