我有一个具有pool.apply_async
的工作者池,他们正在处理一个名为process_data
的函数,该函数返回一个numpy
1D数组。我想把这些1D阵列组合成一个矩阵。这是当前代码:
def process_data(x, y, z)
# stuff happens
return 1Darray
pool = mp.Pool(mp.cpu_count())
jobs = []
start = timeit.default_timer()
for i in range(100):
job = pool.apply_async(process_data, (x, y, z,))
jobs.append(job)
我应该如何获得每个返回的结果并将其添加到全局矩阵中,其中每个1Darray
都是矩阵中的一行?
我需要锁和/或队列吗?
我知道np.column_stack()
在矩阵中堆叠阵列,我不确定如何从multiprocessing
侧实现这一点。
首先需要对apply_async
返回的作业对象使用.get
方法。这将为您提供一个包含(在本例中为100个(1D阵列的列表。
然后,您可以应用np.array
并生成形状的2D numpy数组(length_of_list,length_of _arrays(。
def process_data(x, y, z):
# stuff happens
return 1Darray
pool = mp.Pool(mp.cpu_count())
jobs = []
for i in range(100):
job = pool.apply_async(process_data, (x, y, z,))
jobs.append(job.get())
matrix = np.array(jobs)