我正在尝试使用多处理运行一个简单的测试。在我导入numpy之前,这个测试运行得很好(即使它没有在程序中使用)。代码如下:from multiprocessing import Pool
import time
import numpy as np #this is the problematic line
def CostlyFunc(N):
""""""
tstart = time.time()
x = 0
for i in xrange(N):
for j in xrange(N):
if i % 2: x += 2
else: x -= 2
print "CostlyFunc : elapsed time %f s" % (time.time() - tstart)
return x
#serial application
ResultList0 = []
StartTime = time.time()
for i in xrange(3):
ResultList0.append(CostlyFunc(5000))
print "Elapsed time (serial) : ", time.time() - StartTime
#multiprocessing application
StartTime = time.time()
pool = Pool()
asyncResult = pool.map_async(CostlyFunc, [5000, 5000, 5000])
ResultList1 = asyncResult.get()
print "Elapsed time (multiporcessing) : ", time.time() - StartTime
如果不导入numpy,结果是:
^{pr2}$
总运行时间与1个进程所需的时间相似,这意味着计算已被并行化。如果我导入numpy,结果会变成:CostlyFunc : elapsed time 2.877116 s
CostlyFunc : elapsed time 2.866778 s
CostlyFunc : elapsed time 2.860894 s
Elapsed time (serial) : 8.60492110252
CostlyFunc : elapsed time 8.450145 s
CostlyFunc : elapsed time 8.473006 s
CostlyFunc : elapsed time 8.506402 s
Elapsed time (multiporcessing) : 8.55398178101
串行和多处理方法所用的总时间是相同的,因为只使用一个核心。很明显,这个问题来自于纽姆。我的多处理版本和NumPy版本是否可能不兼容?在
我目前正在linux上使用Python2.7、NumPy 1.6.2和多处理0.70a1