【发布时间】:2021-06-05 14:11:26
【问题描述】:
我的实际问题很长,我相信它可以从多处理中受益。问题的症结如下: 我有一些多处理函数,它接受两个值(x,y)输出一个数字 Q。为了说明:
def multiprocessing_func(x , y):
Q = x*y
(实际功能要复杂得多,需要对输入参数 x 和 y 进行模拟) 我有两个 x 和 y 值数组,例如:
x = np.linspace(0 , 1 , 10)
y = np.linspace(0 , 1 , 10)
我想将multiprocessing_func中的Q值编译成矩阵Q_matrix:
import multiprocessing
if __name__ == '__main__':
processes = []
for m in range(len(x)):
for n in range(len(y)):
p = multiprocessing.Process(target = multiprocessing_func , args=(x[m] , y[n]))
processes.append(p)
p.start()
for process in processes:
process.join()
到目前为止,我的尝试涉及在我的多处理函数中使用 return_dict。 return_dict 只是编译列表中的所有返回值。但是,当然,这给出了错误的维度。本质上,我想知道是否有与此设置等效的多处理:
x = np.linspace(0 , 1 , 10)
y = np.linspace(0 , 1 , 10)
Q_matrix = np.zeros(shape = (len(x) , len(y)))
for m in range(len(x)):
for n in range(len(y)):
Q_matrix[m , n] = x[m]*y[n]
我确信有一个简单的解决方案,但我对多处理还是很陌生,因此非常感谢任何帮助。
【问题讨论】:
-
可能是多处理 Manager.array? docs.python.org/3/library/multiprocessing.html#managers
-
@MarkSetchell 不需要使用托管阵列。 worker 函数返回一个值,主进程将其分配给适当的
Q_matrix[m][n]槽。看我的回答。 -
@Booboo 太好了,谢谢。
标签: python multithreading numpy multiprocessing