def f(a_b):
    return np.linalg.solve(*a_b)

def main():
    args = ((np.random.rand(1000, 1000), np.random.rand(1000)) for _ in
        range(1000))
p = multiprocessing.Pool()
for result in p.imap_unordered(f, args, chunksize=1):
    pass
p.close()
p.join()
if __name__ == '__main__':
    main()
Многопроцессорность Python: как ограничить количество ожидающих процессов?