Многопроцессорность: одновременное добавление к 2 спискам

У меня есть этот код:

from multiprocessing import Pool, Manager import numpy as np l = Manager().list() def f(args): a, b = args l.append((a, b)) data = [(1,2), (3,4), (5,6)] with Pool() as p: p.map(f, data) x, y = np.transpose(l) # do something with x and y... 

На самом деле, данные представляют собой массив с большим количеством значений, а операция транспонирования длительная и потребляемая память.

Я хотел бы добавить «a» и «b» непосредственно в списки x и y, чтобы избежать операции транспонирования. Важно, чтобы результат сохранял соответствие данных и выглядел так: [[1,3,5], [2,4,6]]

Что было бы разумным способом сделать это?

Вместо того, чтобы пытаться добавить из подпроцессов, вы можете заставить функцию вернуть значения и добавить их в основной процесс; вам не нужно заботиться о взаимном доступе между подпроцессами (также не нужно использовать менеджера).

 from multiprocessing import Pool def f(args): a, b = args # do something with a and b return a, b if __name__ == '__main__': data = [(1,2), (3,4), (5,6)] x, y = [], [] with Pool() as p: for a, b in p.map(f, data): # or imap() x.append(a) y.append(b) # do something with x and y assert x == [1,3,5] assert y == [2,4,6]