在numpy数组中并发写入

时间:2017-04-11 16:59:51

标签: python arrays numpy concurrency parallel-processing

我有一项任务要处理大量数据(在pandas DataFrame中),但每次计算都是独立的,因此我想将其并行化。

所以我有一个函数连续输出一个对象(输出实际上是一个包含字符串和集合的数组)。

def compute_row(index, row, output):      
    output[index] = some_function(row)

然后我尝试并行使用它。

output = np.empty(data_length, dtype=object)

num_cores = multiprocessing.cpu_count()
Parallel(n_jobs=num_cores)(delayed(compute_row)(i, row, outputx) for i, row in db.iterrows())  

问题是,即使我将None替换为some_function,我也会返回1数组。

由于索引是唯一的,因此不应存在任何并发内存访问问题。我在这里错过了什么?我应该使用其他数据结构吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

确定, 我找到了另一种方法,使用Pool对象。

from multiprocessing import Pool

def compute_row(row):    
    return some_function(row)

pool = Pool()
output = pool.map(compute_row, (row for i, row in db.iterrows()))