最近我想用并行处理来加速我的一些代码,因为我有一个四核酷睿i7,它看起来很浪费。我学会了Python的(我用V 3.3.2如果事宜中)GIL以及如何使用多模块来克服,所以我写了这个简单的测试程序:Python多重处理故障排除
from multiprocessing import Process, Queue
def sum(a,b):
su=0
for i in range(a,b):
su+=i
q.put(su)
q= Queue()
p1=Process(target=sum, args=(1,25*10**7))
p2=Process(target=sum, args=(25*10**7,5*10**8))
p3=Process(target=sum, args=(5*10**8,75*10**7))
p4=Process(target=sum, args=(75*10**7,10**9))
p1.run()
p2.run()
p3.run()
p4.run()
r1=q.get()
r2=q.get()
r3=q.get()
r4=q.get()
print(r1+r2+r3+r4)
的代码在约48运行秒使用cProfile测量,但单个处理代码
def sum(a,b):
su=0
for i in range(a,b):
su+=i
print(su)
sum(1,10**9)
在约50秒内运行。我知道这种方法有开销,但我预计改进会更加激烈。使用fork()的error不适用于我,因为我在Mac上运行代码。
你看了并行运行时的CPU负载?有几个核心加载? – 9000
是的,所有4个核心中的活动都刺激了,奇怪的是在序列情况下也是如此。活动监视器也声称python只使用1个线程,通过计算中途切换到2(在并行的情况下) – Michal
'multiprocessing'启动单独的_processes_,它在Activity Monitor中获取单独的行(通常都称为“Python”) 。 – abarnert