python - 使工作池将行写入全局矩阵

python - make pool of workers write rows to a global Matrix

我有一群 pool.apply_async 的工作人员正在处理一个名为 process_data 的函数,其中 returns 一个 numpy 一维数组。我想将这些一维数组组合成一个矩阵。这是当前代码:

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 是矩阵中的一行?

我需要锁 and/or 队列吗?

我知道 np.column_stack() 在矩阵中堆叠数组我不确定如何从 multiprocessing 方面实现这一点。

首先,您需要对 apply_async 返回的作业对象使用 .get 方法。这将为您提供一个包含(在本例中为 100 个)一维数组的列表。

然后您可以应用 np.array 并生成形状为 (length_of_list、lenght_of_arrays) 的 2D numpy 数组。

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)