Python multiprocessing.starmap Process Count&速度

时间:2013-07-18 13:58:08

标签: python multiprocessing multiprocess

我有一种遗传算法,其适应度函数是一个繁琐的模拟环境。代码绝对是CPU绑定的,运行在64位python 3.3上,所以我已经实现了multiprocessing.starmap_async并行化。

效果非常好,效率大大提高。在我的处理器上,Intel i7 CPU @ 2.40 GHz(带16GB RAM): 我注意到4个进程的运行时间为8到9秒(对于2个进程来说速度较慢,对于串行进程甚至更慢)。

但是,这只占我处理器的65%到73% 将进程数增加到6使用95%到100%的处理器,但运行时间为11秒。记忆仍然在20%左右

将此计数增加到8并且处理器始终处于100%,但运行时间现在为12秒。记忆力很好。

我无法发布所有内容,但下面是多处理调用(删除了参数)。有什么办法可以在没有减速的情况下使用更多的处理器吗?我也很感激任何理解这种现象发生的原因。

多处理呼叫:

        step = np.int8(pop_size/4)
        pol = Pool(processes=4)

        res = pol.starmap_async(SimWorker, ((i, i+step,pop,"a bunch of other arguments") for i in range(0, pop_size, step)))
        fitnessdict = res.get()
        fitnessdict = np.asarray(fitnessdict)
        for i in range(0,pop_size,step):
            for p in range(i,i+step):
                fitness[p] = fitnessdict[i/step,p]

SimWorker:

def SimWorker(start, stop, pop, "a bunch of other arguments"):
    """
    Run a batch of sims
    """

    for p in range(start, stop):
        fitness[p] = Sim_T(pop[p],"a bunch of other arguments")
    return(fitness)

0 个答案:

没有答案