【发布时间】:2016-07-14 08:34:57
【问题描述】:
上下文:我有一个数组,我分散在我的引擎中(此时有 4 个引擎),想要对数组中的每个点应用一个函数以进行任意次数的迭代并收集来自引擎的结果数组并对其执行分析。
例如,我有分散的数据点数组以及每个数据点的迭代次数:
data_points = range(16)
iterations = 10
dview.scatter('points', data_points)
我有一个用户提供的函数,它被推送到引擎:
def user_supplied_function(point):
return randint(0, point)
dview.push(dict(function_one = user_supplied_function))
我的结果和并行执行的列表:
result_list = []
for i in range(iterations):
%px engine_result = [function_one(j) for j in points]
result_list.append(dview.gather('engine_result'))
问题:这行得通,我从引擎中得到了我想要的结果,但是随着迭代次数的增加,循环执行的时间越来越长。在 50 个点上进行 1000 次迭代需要 15 秒以上才能完成。而此任务的顺序版本只需不到一秒钟。
知道是什么原因造成的吗?会不会是来自gather() 的消息的开销?如果是这样,任何人都可以提出任何解决方案吗?
【问题讨论】:
标签: python ipython mpi jupyter-notebook ipython-parallel