Python多处理.starmap过程计数和速度

2024-09-29 23:15:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个遗传算法,它的适应度函数是一个繁琐的模拟环境。这段代码绝对是CPU限制的,运行在64位的Python3.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公司:

^{pr2}$

Tags: inforsizeasync进程stepnp时间

热门问题