我有一项任务要处理大量数据(在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
数组。
由于索引是唯一的,因此不应存在任何并发内存访问问题。我在这里错过了什么?我应该使用其他数据结构吗?
提前致谢!
答案 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()))