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)
我有一群 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)