如何在python中的joblib库中使用嵌套循环

时间:2016-04-05 10:36:42

标签: python multiprocessing joblib

实际代码如下:

def compute_score(row_list,column_list): 

    for i in range(len(row_list)):
            for j in range(len(column_list)):
                tf_score = self.compute_tf(column_list[j],row_list[i])

我想要实现多处理,即在j的每次迭代中,我想要汇集column_list。由于compute_tf函数很慢,我想多处理它。

我发现必须在Python中使用joblib,但我无法使用嵌套循环进行解决。

Parallel(n_jobs=2)(delayed(self.compute_tf)<some_way_to_use_nested_loops>)

这是要实现的目标。 如果提供任何解决方案或任何其他解决方案,这将是一个很大的帮助。

2 个答案:

答案 0 :(得分:7)

无需实现生成器函数的另一种解决方案是使用生成器的嵌套列表解析:

Parallel(n_jobs=2)(delayed(self.compute_tf)(i, j) for j in column_list for i in row_list)

订单将作为:

[(i, j) for j in range(10) for i in range(10)]

答案 1 :(得分:3)

我不理解你关于Parallel的部分。但是,您的代码可以简化为:

def compute_score(row_list,column_list): 

    for i in row_list:
            for j in column_list:
                tf_score = self.compute_tf(j,i)

创建一个生成每个j,i的生成器可能很有用,这样您就可以在生成器之外处理它们了

def compute_pairs(row_list,column_list): 

    for i in row_list:
            for j in column_list:
                yield j, i

然后使用:

 scored = [compute_tf(j,i) for j, i in compute_pairs(row_list, column_list)]