2016-04-22 13 views
2

apply_asyncのテストコードが1つあります。 test_callのelseの 'apply_sync'が実行されないのはなぜですか? if-elseブロックが同じ 'apply_async'呼び出しで置き換えられると、両方が実行されます。if-elseブロックでの多重処理 'apply_async'の実行

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、引数の=([4、5であるべきで、欠落しています6]、)、callback = _join) –

答えて

0

Vikasによると、最初のapply_async行の終わりには、余分な接尾辞があります。

これらの2つの問題を修正してコードを実行すると、期待する出力が得られます。

カンマではなく、カンマのみを固定すると、あなたが見ていると思われる出力が得られます。

+0

余分な括弧はタイプミスです。 argsのコンマが問題でした。 Thnx。 – nebi

関連する問題