我在使用Python进行并行处理时遇到了一些麻烦。我对并行计算的概念完全陌生。我使用标准Python附带的多处理。
我的电脑里有12个线程。我要求12名工人,但我并不总能得到我要求的所有工人。当我无法访问我需要在下面的代码中处理nTasks数量的任务时,我的问题就出现了(当前设置为4)。然后会发生什么,只是代码卡住了,永远不会得到评论“#Get Results”下的内容。似乎随机有多少工人(我总是要求12),但是当我在下面的代码中得到三个或更少的工人时会出现问题:
import multiprocessing as mp
import scipy as sp
import scipy.stats as spstat
import pylab
def testfunc(x0, N):
print 'working with x0 = %s' % x0
x = [x0]
for i in xrange(1,N):
x.append(spstat.norm.rvs(size = 1)) # stupid appending to make it slower
if i % 10000 == 0:
print 'x0 = %s, i = %s' % (x0, i)
return sp.array(x)
def testfuncParallel(fargs):
return testfunc(*fargs)
pool = mp.Pool(12) # I have 12 threads
nTasks = 4
N = 100000
tasks = [(x, n) for x, n in enumerate(nTasks*[N])] # nTasks different tasks
result = pool.map(testfuncParallel, tasks)
pool.close()
pool.join()
# Get results:
sim = sp.zeros((N, nTasks))
for nn, res in enumerate(result):
sim[:, nn] = res
pylab.figure()
for i in xrange(nTasks):
pylab.subplot(nTasks,1, i + 1)
pylab.plot(sim[:, i])
pylab.show()
我曾尝试使用pool.map_async而不是pool.map,但我无法解决问题。
提前致谢,
此致
的Matias
答案 0 :(得分:0)
事实证明,在Wing编辑器中运行调试模式时,这只是一个问题,请参阅我在其他问题multiprocessing.Pool seems to work in Windows but not in ubuntu?中的Stephan Deibels评论。