[英]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.