我在具有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%,而且我的内存不足。
为什么这个程序在多处理时要慢得多?
答案 0 :(得分:1)
Windows没有fork()
,因此多处理必须通过每次启动新进程时导入__main__
模块来解决此问题。
这意味着当每个子进程运行时,它不仅运行目标函数,还运行文件末尾的部分。将它移动到块中它应该更快!