def data_stream(a, b):
    for i, av in enumerate(a):
        for j, bv in enumerate(b):
            yield (i, j), (av, bv)

def proxy(args):
    return args[0], fun(*args[1])
a = list(range(100, 400, 100))
b = list(range(100, 400, 100))
Y = {}
pool = Pool(processes=4)
results = pool.map(proxy, data_stream(a, b))
for k, v in results:
    Y[k] = v
pprint.pprint(Y)
Многопроцессорность Python для дорогостоящей работы с 2D-массивом