【发布时间】:2019-07-24 07:20:19
【问题描述】:
我已在许多代码中成功使用multiprocessing.dummy.Pool 来加快循环的计算时间。但是我遇到了一个我无法弄清楚的问题,我添加的线程越多,代码运行的速度就越慢。这一切都在 python 2.7 中,在一个 8 核的 windows 盒子上运行。
import numpy as np
from multiprocessing.dummy import Pool
from datetime import datetime
global X
pool=Pool(processes=1)
def foo(iy):
global X
x=X[iy]
for i in range(len(x)):
for j in range(len(x[i])):
_=np.correlate(x[i,j],[1,1,1],mode='same')
return None
t=datetime.now()
X=np.random.rand(11,11,512,512)
_=pool.map(foo,range(11))
print((datetime.now()-t).total_seconds())
使用processes=1,运行时间为 0.7 秒。 processes=2 会增加到 1 秒,processes=4 会增加到 2.3 秒。如果我将代码重写如下,也会出现同样的问题:
import numpy as np
from multiprocessing.dummy import Pool
from datetime import datetime
pool=Pool(processes=1)
def foo(x):
for i in range(len(x)):
for j in range(len(x[i])):
_=np.correlate(x[i,j],[1,1,1],mode='same')
return None
t=datetime.now()
X=np.random.rand(11,11,512,512)
_=pool.map(lambda z:foo(X[z]),range(11))
print((datetime.now()-t).total_seconds())
我有很多 循环要做,并且真的希望/需要通过将它们拆分为多个内核来加快速度。任何人都知道为什么多处理会减慢我的速度,以及如何解决它?
【问题讨论】:
-
您确定您不只是针对启动新流程的开销使用有限的数据集进行测试吗?也许用更重的数据集测试它?
标签: python numpy multiprocessing