Ich habe ein 60 GB SciPy Array (Matrix), das ich zwischen mehr als 5 multiprocessing
Process
Objekten teilen muss . Ich habe numpy-sharedmem gesehen und diese Diskussion auf der SciPy-Liste gelesen . Es scheint zwei Ansätze zu geben - numpy-sharedmem
und die Verwendung von a multiprocessing.RawArray()
und die Zuordnung von NumPy dtype
s zu ctype
s. Nun numpy-sharedmem
scheint der richtige Weg zu sein, aber ich habe noch kein gutes Referenzbeispiel gesehen. Ich brauche keine Sperren, da das Array (eigentlich eine Matrix) schreibgeschützt ist. Aufgrund seiner Größe möchte ich jetzt eine Kopie vermeiden. Es klingt so, als ob die richtige Methode darin besteht, die einzige Kopie des Arrays als sharedmem
Array zu erstellen und sie dann an die Process
Objekte zu übergeben. Einige spezifische Fragen:
Was ist der beste Weg, um die Sharedmem-Handles tatsächlich an Subes zu übergeben
Process()
? Benötige ich eine Warteschlange, um nur ein Array weiterzugeben? Wäre eine Pfeife besser? Kann ich es einfach als Argument an denProcess()
Init der Unterklasse übergeben (wo ich davon ausgehe, dass es eingelegt ist)?In der Diskussion, die ich oben verlinkt habe, wird erwähnt, dass es
numpy-sharedmem
nicht 64-Bit-sicher ist. Ich verwende definitiv einige Strukturen, die nicht mit 32-Bit adressierbar sind.Gibt es Kompromisse bei der
RawArray()
Herangehensweise? Langsamer, fehlerhafter?Benötige ich eine Zuordnung von Typ zu Typ für die Methode numpy-sharedmem?
Hat jemand ein Beispiel für OpenSource-Code, der dies tut? Ich bin sehr praktisch und es ist schwierig, dies zum Laufen zu bringen, ohne ein gutes Beispiel zu haben.
Wenn ich zusätzliche Informationen zur Verfügung stellen kann, um dies für andere zu klären, kommentieren Sie diese bitte und ich werde sie hinzufügen. Vielen Dank!
Dies muss unter Ubuntu Linux und möglicherweise Mac OS ausgeführt werden, aber die Portabilität ist kein großes Problem.
multiprocessing
für jeden Prozess eine Kopie des Ganzen erstellen.