我正在尝试使用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的答案。
答案 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])