Python中的多处理速度比不使用Python时慢

Python中的多处理速度比不使用Python时慢,python,multiprocessing,Python,Multiprocessing,我在一台2核4线程的计算机上使用Python3.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()

我在一台2核4线程的计算机上使用Python3.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%,而且我没有耗尽内存

为什么这个程序在进行多处理时会慢得多?

Windows没有
fork()
,因此每次启动新进程时,多处理都必须通过导入
\uuu main\uu
模块来解决这一问题


这意味着,当每个子流程运行时,它不仅运行目标函数,还运行文件末尾的部分。把它移到街区里,应该会快得多

缩进应该改变吗?是的,我不知道整个程序必须在if子句下。现在已经修好了,谢谢!现在,进行多处理的部件的时间为3.44秒。这几乎是一个2倍的速度提高(从没有多处理),但我仍然期待稍微多一点。是否有任何方法可以接近4倍的速度?不,这是cpu限制的问题所能达到的最接近的速度。您的cpu有2个内核,这意味着仍然只有两个线程可以同时处于活动状态,有4个内核线程基本上只是减少了切换线程时的一些开销。首先,当一个常规python程序在没有多处理的情况下运行时,任务管理器说我的计算机只使用了25%的CPU,那么我的计算机实际使用了大约50%的处理能力吗?第二,如果我只运行2个进程,但每个进程都要做两倍的工作,那么这个程序会花费与4个进程相同的时间吗?1)-我真的不知道windows taskmanager显示的cpu使用情况,我发现了一些不同的解释。这似乎是个好主意。2) 也许,似乎是对的。试试看:)