我尝试使用ProcessPoolExecutor
解决多个子问题(sp
是类SP
的对象)。下面是我用来做这件事的函数:
def get_sp_sol_(self, remove, duals, df_duals, df_duals_3):
for sp in self.sP.values(): # I used to update these values using class attributes outside of this function but it seems that setting class attributes does not work with conccurency
sp.Duals =duals
sp.BrDuals = df_duals
sp.BrDuals_3 = df_duals_3
sp.rem =remove
with concurrent.futures.ProcessPoolExecutor(max_workers=6) as executor:
results = [executor.submit(sp.solve_) for sp in self.sP.values()]
lis_res = []
for f in results:
res = self.convert_labels_rdp(f.result()[0],f.result()[1] )
lis_res.extend([self.add_rdps(tuple(r), rdp) for r, rdp in res])
return lis_res
在不进行多重处理的情况下求解时,大约需要11秒,而在使用多重处理时,大约需要70秒
我运行分析器,得到如下结果:
我检查了关于这个问题的其他问题,但似乎没有人回答为什么多重处理比串行计算花费的时间要长得多。
solve_
函数在这里很长。它在另一个文件(类SP
)中定义,并从同一个类SP
调用函数,从其他类/文件调用一些常量和一些对象
为什么使用多处理解决问题需要更长的时间
目前没有回答
相关问题 更多 >
编程相关推荐