2

Ich habe einen Code, der zwei Parameter gegeben, (k, m) wird eine 4d numpy Array zurückgeben, meine Voraussetzung ist, dass ich dieses Array für mögliche Werte von (k, m) berechnen muss mit k, m < N und addieren sie. Dies ist langsam in der Serie, so dass ich versuche, das Multiprocessing-Modul in Python zu lernen, um es zu tun. Python Multiprocessing-Modul, gemeinsame multidimensionale Array

Im Wesentlichen möchte ich meine 8 Kerne verwenden, um parallel diese 4d-Arrays zu berechnen und sie alle hinzuzufügen. Jetzt ist die Frage, wie man das gestaltet. Jedes Array kann um 100 MB und N um 20 sein. Das Speichern von 20 ** 2 * 100 MB in einer Warteschlange ist nicht möglich. Die Lösung wäre, ein gemeinsames Speicherobjekt zu haben, ein Ergebnis-Array, zu dem jeder Prozess die Ergebnisse hinzufügen wird.

Multiprocessing hat zwei Möglichkeiten, dies zu tun, mit Shared Memory oder einem Server-Prozess. Keiner von ihnen scheint Mutlidim-Arrays zu unterstützen. Kann jemand vorschlagen, mein Programm zu implementieren? Danke im Voraus.

+1

['numpy.memmap()'] (http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.memmap.html) könnte Ihnen helfen (oder nicht). Sehen Sie hier http://stackoverflow.com/questions/17785275/share-large-read-only-numpy-array-between-multiprocessing-processes für Zeiger. –

+0

Mögliches Duplikat von [Benutze Nummy-Array im Shared Memory für Multiprocessing] (http://stackoverflow.com/questions/7894791/use-numpy-array-in-shared-memory-for-multiprocessing) – ppperry

Antwort

1

Ein Ansatz wäre, memory mapped arrays im übergeordneten Prozess zu erstellen und sie an die untergeordneten Elemente zu übergeben. Zusätzlich sollten Sie wahrscheinlich ein multiprocessing.Event für jedes zugeordnete Array haben, so dass der chld-Prozess dem Elternteil signalisieren kann, dass ein Array erstellt wurde.