Python中的多处理问题.Pool

时间:2011-08-01 14:53:33

标签: python multiprocessing

我在使用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

1 个答案:

答案 0 :(得分:0)

事实证明,在Wing编辑器中运行调试模式时,这只是一个问题,请参阅我在其他问题multiprocessing.Pool seems to work in Windows but not in ubuntu?中的Stephan Deibels评论。