2

У меня есть код, который задает два параметра, (k, m) вернет массив 4d numpy, мое требование состоит в том, что мне нужно вычислить этот массив для возможных значений (k, m) с k, m < N и добавить их. Это медленно в серийном режиме, поэтому я пытаюсь изучить модуль многопроцессорности в python для этого. https://docs.python.org/2/library/multiprocessing.htmlмодуль многопроцессорности python, общий многомерный массив

По сути, я хочу использовать 8 ядер для параллельного вычисления этих 4d-массивов и добавления их всех. Теперь вопрос заключается в том, как это сделать. Каждый массив может быть около 100 МБ и N около 20. Таким образом, сохранение 20 ** 2 * 100 МБ в очереди невозможно. Решение состояло бы в том, чтобы иметь объект общей памяти, массив результатов, в котором каждый процесс будет продолжать добавлять результаты.

У многопроцессорной обработки есть два способа для этого, используя общую память или серверный процесс. Ни один из них, похоже, не поддерживает массивы mutlidim. Может ли кто-нибудь предложить способ реализации моей программы? Thx заранее.

+1

['numpy.memmap()'] (http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.memmap.html) может помочь вам (или нет). Посмотрите здесь http://stackoverflow.com/questions/17785275/share-large-read-only-numpy-array-between-multiprocessing-processes для указателей. –

+0

Возможный дубликат [Использовать массив numpy в общей памяти для многопроцессорной обработки] (http://stackoverflow.com/questions/7894791/use-numpy-array-in-shared-memory-for-multiprocessing) – ppperry

ответ

1

Одним из способов было бы создать memory mapped arrays в родительском процессе и передать их детям, которые нужно заполнить. Кроме того, у вас должен быть multiprocessing.Event для каждого сопоставленного массива, поэтому процесс chld может сигнализировать родителям о том, что массив выполнен.