在 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
我有一个遗传算法,我想加快它的速度。我认为实现此目的的最简单方法是 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