在 python 中并行化 for 循环

Parallelize for loop in python

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

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

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

我正在使用 python 2.7

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

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