【发布时间】:2017-10-30 14:39:37
【问题描述】:
我有一个函数应用于不同的数据块。由于每个块都独立于其余块,因此我希望并行执行所有块的函数。
我有一个 result 字典,它应该保存每个块的计算输出。
我是这样做的:
from joblib import Parallel, delayed
import multiprocessing
cpu_count = multiprocessing.cpu_count()
# I have 8 cores, so I divide the data into 8 chunks.
endIndeces = divideIndecesUniformly(myData.shape[0], cpu_count) # e.g., [0, 125, 250, ..., 875, 1000]
# initialize result dictionary with empty lists.
result = dict()
for i in range(cpu_count):
result[i] = []
# Parallel execution for 8 chunks
Parallel(n_jobs=cpu_count)(delayed(myFunction)(myData, start_idx=endIndeces[i], end_idx=endIndeces[i+1]-1, result, i) for i in range(cpu_count))
但是,当执行完成时,result 具有所有初始空列表。我想如果我在每个数据块上连续执行该函数,它就可以正常工作。例如,如果我将最后一行替换为以下内容,result 将拥有所有计算值。
# Instead of parallel execution, call the function in a for-loop.
for i in range(cpu_count):
myFunction(myData, start_idx=endIndeces[i], end_idx=endIndeces[i+1]-1, result, i)
在这种情况下,result 值会更新。
似乎当函数并行执行时,它无法写入给定的字典(result)。所以,我想知道如何获得每个数据块的函数输出?
【问题讨论】:
标签: python python-3.x parallel-processing