我之前有一个关于这个问题的相关问题:Parallelize for loop in python
我有一个遗传算法,我试图通过并行化评估函数来加快速度。 GA是一个类,代码看起来像这样:
copy_reg.pickle(types.MethodType,lambda method: (getattr, (method.im_self, method.im_func.__name__)),getattr)
class GA:
...
...
def evaluation(self):
self.scores = Pool(processes=nprocs).map(self.costly_function,self.population)
def run(self):
self.initial_population()
self.evaluation()
while self.Gen > i:
self.select()
self.crossover()
self.mutation()
self.evaluation()
i += 1
与顺序方法相比,这给出了正确的结果,但速度明显变慢。我的猜测是,这是因为我在函数evaluation
中为while循环中的每一代创建了一组新的流程工作者。有没有办法重复工人,所以我可以加快速度?
答案 0 :(得分:0)
通过添加我从https://stackoverflow.com/a/25385582/4759898
获得的函数来解决问题def __getstate__(self):
self_dict = self.__dict__.copy()
del self_dict['pool']
return self_dict
def __setstate__(self, state):
self.__dict__.update(state)