if-else块中的多处理'apply_async'执行

时间:2016-04-22 06:04:49

标签: python multiprocessing

我有一个apply_async的测试代码。为什么test_call中的else的'apply_sync'没有被执行?如果“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]

预期应付:[1,4,9,16,25,36]

1 个答案:

答案 0 :(得分:0)

除了Vikas提到的丢失的逗号之外,你还在第一个apply_async行的末尾有一个无关紧密的paren。

解决这两个问题并运行代码,我得到了你期望的输出。

仅修复paren而不是逗号,我得到你描述的输出。