我想用下面的代码得到result_1和result_2数组:
import multiprocessing as mp
import numpy as np
result_1=[]
result_2=[]
a=np.random.rand(10,10)
b=np.random.rand(7,7)
def inv_1(x):
result_1.append(np.linalg.inv(x))
def inv_2(y):
result_2.append(np.linalg.inv(y))
if __name__ == "__main__":
p1 = mp.Process(target=inv_1, args=(a),)
p2 = mp.Process(target=inv_2, args=(b),)
p1.start()
p2.start()
p1.join()
p2.join()
print(result_1, result_2)
但是,当我运行代码时,我得到了以下输出:
[] []
我怎样才能解决这个问题?
1条答案
按热度按时间thtygnil1#
与线程不同,你不能在进程间共享任意变量。要做你想做的,你可以使用
multiprocessing.Manager
对象创建共享列表,例如:这就是您要做的,尽管我不清楚 * 为什么 * 您要这样做--
result_1
和result_2
都只有一个值(因为您只是将一个项附加到一个空列表中),所以不清楚为什么首先需要列表。更广泛地说,您可能希望重新设计代码,使其不依赖于共享变量,一个常见的解决方案是使用队列将数据从工作进程传递回主进程。