【发布时间】:2016-11-07 10:24:22
【问题描述】:
我之前有一个关于这个问题的相关问题: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 循环内为每一代创建了一组新的进程工作者。有没有办法重用工人,这样我就可以提高速度?
【问题讨论】:
-
nprocs 设置为什么?
self.costly_function在 CPU、内存、IO 或其他方面是否“昂贵”? -
设置为4,
costly_function在CPU方面的开销很大。
标签: python python-2.7 parallel-processing genetic-algorithm python-multiprocessing