繁体   English   中英

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

[英]Multiprocessing in Python slower than without

我在具有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%CPU,而且我的内存还没有耗尽。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM