Python中的多处理比没有处理慢

时间:2013-06-14 23:40:23

标签: python multiprocessing

我在具有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%,而且我的内存不足。

为什么这个程序在多处理时要慢得多?

1 个答案:

答案 0 :(得分:1)

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

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