Проблема с многопроцессорной обработкой. Пул в Python - PullRequest
1 голос
/ 01 августа 2011

У меня небольшие проблемы с параллельной обработкой в ​​Python. Я совершенно новичок в концепции параллельных вычислений. Я использую многопроцессорность, которая поставляется со стандартным Python.

У меня 12 тем на моем компьютере. Я прошу 12 рабочих, но я не всегда могу получить всех рабочих, которых я прошу. Моя проблема возникает, когда я не получаю доступ к такому количеству работников, которое мне нужно для обработки числа задач nTasks в моем коде ниже (в настоящее время установлено четыре). То, что происходит тогда, это просто то, что код застревает и никогда не попадает в то, что находится под комментарием «# 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 голосов
/ 11 августа 2011

Оказалось, что это была только проблема при запуске режима отладки в Wing Editor, см. Комментарий Стефана Дейблса в моем другом вопросе multiprocessing.Pool, похоже, работает в Windows, но не в Ubuntu? .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...