Многопроцессорная обработка Python занимает гораздо больше времени, чем одиночная обработка
Я последовательно выполняю несколько больших вычислений для 3 разных массивов 2D. Массивы огромные, 25000x25000 каждый. Каждое вычисление занимает много времени, поэтому я решил запустить 3 из них параллельно на 3 процессорных ядрах на сервере. Я следую стандартному руководству по многопроцессорности и создаю 2 процесса и рабочую функцию. Два вычисления выполняются через два процесса, а третий выполняется локально без отдельного процесса. Я передаю огромные массивы в качестве аргументов таких процессов, как:
p1 = Process(target = Worker, args = (queue1, array1, ...)) # Some other params also going
p2 = Process(target = Worker, args = (queue2, array2, ...)) # Some other params also going
функция Worker отправляет обратно два пустых вектора (массив 1D) в список, добавленный в очередь, например:
queue.put([v1, v2])
Я не пользуюсьmultiprocessing.pool
но удивительно, я не получаю ускорение, это фактически работает в 3 раза медленнее. Проходит ли передача больших массивов времени? Я не могу понять, что происходит. Должен ли я использовать объекты общей памяти вместо передачи массивов?
Я буду благодарен, если кто-нибудь может помочь.
Спасибо.