Beim Einsatz von Multiprocessing stellt sich die Frage, ob Shared Readonly Daten in verschiedene Prozesse kopiert werden. Wenn ja, wie kann dieses Kopieren verhindert oder gefördert werden?
Der bereitgestellte Codeausschnitt, der ein globales Array als Standardparameter innerhalb einer von mehreren Prozessen ausgeführten Funktion verwendet, gibt Anlass zur Sorge hinsichtlich der Duplizierung des Gedächtnisses. Um zu verhindern, dass einzelne Prozesse eine separate Kopie der Daten erhalten, sollten Sie die Verwendung von Shared Memory in Betracht ziehen.
Multiprocessing und Numpy können kombiniert werden, um Daten effizient zu teilen:
<code class="python">import multiprocessing import ctypes import numpy as np shared_array_base = multiprocessing.Array(ctypes.c_double, 10*10) shared_array = np.ctypeslib.as_array(shared_array_base.get_obj()) shared_array = shared_array.reshape(10, 10)</code>
Innerhalb der von jedem Prozess ausgeführten Funktion sind Änderungen am gemeinsam genutzten Array für alle sichtbar:
<code class="python">def my_func(i, def_param=shared_array): shared_array[i,:] = i</code>
Das entsprechende Der Mechanismus für dieses Problem hängt von den spezifischen Anforderungen und Zugriffsmustern der Anwendung ab. Shared Memory bietet in diesem Zusammenhang einen wirksamen Ansatz, um Datenduplizierungen zu verhindern und den gemeinsamen Zugriff mehrerer Prozesse sicherzustellen.
Das obige ist der detaillierte Inhalt vonSollten schreibgeschützte freigegebene Daten in Multiprozessorumgebungen kopiert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!