Запуск функции Python параллельно и сохранение результатов в один окончательный массив? - PullRequest
0 голосов
/ 23 января 2019

У меня есть функция, которая запускается для циклов для направлений i и j, и в каждом цикле я вычисляю выход нейронной сети с прямой связью и сохраняю ее в массив. Это займет много времени, чтобы сделать 1000 * 1000 петель, не говоря уже о чем-то большем. Это в основном создаст 2D-изображение с интенсивностью пикселей. Я хотел бы распараллелить это, чтобы каждый процесс работал на небольшой части изображения, чтобы он работал быстрее.

Функция не зависит от других значений, только значения i и j моих переменных x и y. Как мне заставить это работать с многопроцессорностью?

Это то, что я имею до сих пор. Как правильно добавить результаты в новый 2D-массив?

import multiprocessing
from multiprocessing import pool

out = np.zeros([image_size,image_size])

def desired_function(out):

    for i in range(image_size):
        for j in range(image_size):
            x = i/image_size
            y = j/image_size
            input = [0.2,0.45,0.56,0.1,0.9,0.123,0.873]
            r = math.sqrt(x*x + y*y)
            input.append(x)
            input.append(y)
            input.append(r)
            input = torch.FloatTensor(input)
            out[i][j] = neuralNet(input)
            #print(f"{i},{j}",end="\r")
    print("done")
    return out   # "for example"


p = mp.Pool(4)

result = p.map(desired_function,range(4))
result = np.array(result)
p.close()
p.join()

processes = []
for i in range(0,4):
    p = multiprocessing.Process(target=desired_function, args=([out]))
    processes.append(p)
    p.start()

for process in processes:
    process.join()
...