在python中并行化循环

时间:2016-11-03 13:06:01

标签: python-2.7 multiprocessing genetic-algorithm python-multiprocessing

我有一个遗传算法,我想加快。我认为实现这一目标的最简单方法是使用pythons多处理模块。在我的GA上运行cProfile后,我发现大部分计算时间都发生在评估函数中。

def evaluation():
    scores = []
    for chromosome in population:
        scores.append(costly_function(chromosome))

我将如何并行化此方法?重要的是,所有分数的顺序与程序顺序运行时的顺序相同。

我正在使用python 2.7

1 个答案:

答案 0 :(得分:2)

使用游泳池(我显示了imap和地图,因为谷歌上的一些结果说地图可能不适合订购,虽然我还没有看到证据):

from multiprocessing import Pool
def evaluation(population):
    return list(Pool(processes=nprocs).imap(costly_function,population))

或(我使用的):

 return Pool(processes=nprocs).map(costly_function,population)

将nprocs定义为您想要的并行进程数。

自:     https://docs.python.org/dev/library/multiprocessing.html#multiprocessing.pool.Pool