2016-04-22 1 views
2

У меня есть один тестовый код для apply_async. Почему «apply_sync» else в test_call не выполняется? Если блок «if-else» заменяется одинаковыми вызовами «apply_async», оба выполняются.Выполнение многопроцессорной обработки 'apply_async' в блоке if-else

from multiprocessing import Pool 


def _execute(l): 
    res = [] 
    for i in l: 
     res.append(i * i) 

    return res 


class TestMulti(object): 

    def __init__(self): 
     self.l = [] 

    def test_call(self): 
     p = Pool(2) 

     def _join(res): 
      self.l += res 
     for i in range(2): 
      if i % 2 == 0: 
       p.apply_async(_execute, args=([1, 2, 3],),callback=_join) 
      else: 
       p.apply_async(_execute, args=([4, 5, 6]), callback=_join) 

     p.close() 
     p.join() 
     print self.l 


if __name__ == '__main__': 
    t = TestMulti() 
    t.test_call() 

O/P: [1, 4, 9]

Ожидаемое O/P: [1, 4, 9, 16, 25, 36]

+3

вам не хватает кома в p.apply_async (_execute, арг = ([4, 5, 6]), обратный вызов = _join) должно быть p.apply_async (_execute, Args = ([4, 5, 6],), callback = _join) –

ответ

0

В дополнение к отсутствующей запятой упомянутый Vikas, у вас также есть посторонний близкий парик в конце первой строки apply_async.

Исправление этих двух проблем и запуск кода, я получаю ожидаемый результат.

Исправление только пара, а не запятая, я получаю вывод, который вы описываете.

+0

Дополнительный пароль был опечатка. Это была запятая в аргументах. Thnx. – nebi

Смежные вопросы