Shared Memory Objects in Multiprocessing
In der Multiprocessing-Bibliothek von Python stehen Sie vor der Herausforderung, große schreibgeschützte Arrays zwischen mehreren Prozessen gleichzeitig zu teilen.
Verwenden der Fork()-Semantik
Wenn Ihr Betriebssystem die Copy-on-Write-Fork()-Semantik verwendet (z. B. Unix), wird dies bei Ihrer schreibgeschützten Datenstruktur der Fall sein für alle untergeordneten Prozesse ohne zusätzlichen Speicherverbrauch zugänglich sein. Dies liegt daran, dass fork() einen Copy-on-Write-Vorgang erstellt, sodass Änderungen an der Datenstruktur durch einen Prozess nur in seinen eigenen Speicherbereich geschrieben werden und die ursprüngliche Datenstruktur für andere Prozesse intakt bleibt.
Array in Shared Memory packen
Um die Effizienz zu steigern, konvertieren Sie Ihr Array in eine NumPy- oder Array-Struktur und speichern Sie es im Shared Memory. Erstellen Sie einen Multiprocessing.Array-Wrapper darum und übergeben Sie ihn an Ihre Funktionen.
Schreibbare gemeinsame Objekte
Wenn Sie beschreibbare gemeinsame Objekte benötigen, verwenden Sie Synchronisierungs- oder Sperrmechanismen. Multiprocessing bietet zwei Methoden:
Der Manager-Proxy-Ansatz kann beliebige Python-Objekte verarbeiten, ist jedoch aufgrund der Objektserialisierung und -deserialisierung bei der Kommunikation zwischen Prozessen langsamer.
Alternative Ansätze
Über die Multiverarbeitung hinaus gibt es in Python verschiedene Parallelverarbeitungsbibliotheken. Ziehen Sie diese Optionen in Betracht, wenn Sie spezielle Anforderungen haben, die durch Multiprocessing möglicherweise nicht ausreichend abgedeckt werden.
Das obige ist der detaillierte Inhalt vonWie kann ich große schreibgeschützte Arrays zwischen mehreren Prozessen in Pythons Multiprocessing teilen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!