Joblib中for循环的并行索引的保留轨迹

问题描述 投票:0回答:1

在Python中,我有一个需要在循环中进行迭代的对象的列表,并为每次迭代输出结果,同时跟踪要迭代的对象的索引。

通常,这不是问题,因为我可以使用enumerate并执行

results = []

for index, value in enumerate(list_of_objects):
    ... *calculations* ...

    results.append([index, result_of_calculations])

但是,最近我的计算花费了太长时间,因此我开始使用joblib来并行化我的循环。但是,现在我无法使用joblib来跟踪操作索引,因为循环的每个部分都可以在不规则的时间开始和结束,并且我感到很困惑。

我如何才能像下面的代码那样工作,其中子数组的每个第一个值都引用用于该特定迭代的对象的索引?

enumerate
python loops parallel-processing joblib
1个回答
0
投票

即使from joblib import Parallel, delayed def single_loop_function(x): single_output = *some calculations based on x* return single_output all_output = Parallel(n_jobs=-1, verbose=3, backend="loky")( map(delayed(single_loop_function), list_of_objects)) print(all_output) [[0, *result*], [1, *result*], ... [5, *result*], [3, *result*]] 不一定明确支持此功能,我也发现了一种更好的方法(更Pythonic)(wwii对joblib问题的评论):将this转换为子列表列表这样,

list_of_objects

然后将new_list = [[i, value] for i, value in enumerate(list_of_objects)] 输入到joblib函数中,其中将显式附加每个对象的索引。

© www.soinside.com 2019 - 2024. All rights reserved.