1

我在具有 2 个内核但 4 个线程的计算机上使用 python 3.3。我正在尝试学习使用多处理来加速代码,但是使用它时我的代码变慢了。

为了开始我的学习,我做了一个小程序:

from multiprocessing import Process
import time

def f():
    s = 0
    for i in range(2*10**7):
        s += i
    return s

if __name__ == '__main__':
    t = time.time()
    p1 = Process(target = f)
    p2 = Process(target = f)
    p3 = Process(target = f)
    p4 = Process(target = f)
    p1.start()
    p2.start()
    p3.start()
    p4.start()
    p1.join()
    p2.join()
    p3.join()
    p4.join()
    print (time.time()-t)

t2 = time.time()
for a in range(4):
    f()
print(time.time()-t2)

3 次运行的平均值,第一部分有多重处理需要 17.15 秒,而没有多重处理的第二部分需要 6.24 秒。使用 Windows 任务管理器,我看到我的计算机确实在第一部分使用了 100% 的 CPU,而第二部分仅使用了 25%,而且我没有内存不足。

为什么这个程序的多处理速度如此之慢?

4

1 回答 1

2

Windows 没有,因此 multiprocessing 必须通过在每次启动新进程时fork()导入模块来解决这个问题。__main__

这意味着当您的每个子进程运行时,它不仅会运行目标函数,还会运行文件末尾的部分。将它移到块中,它应该更快!

于 2013-06-14T23:53:32.800 回答