У меня есть один тестовый код для 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]
вам не хватает кома в p.apply_async (_execute, арг = ([4, 5, 6]), обратный вызов = _join) должно быть p.apply_async (_execute, Args = ([4, 5, 6],), callback = _join) –