Numpy-Arrays im Shared Memory für Multiprocessing verwenden
Die Nutzung von Shared Memory für Numpy-Arrays ist in Multiprocessing-Szenarien üblich. Allerdings kann es eine Herausforderung sein, ihr volles Potenzial als Numpy-Arrays und nicht nur als Ctypes-Arrays auszuschöpfen.
Die Lösung liegt in der Nutzung von mp.Array() aus dem Multiprocessing-Modul. Diese Funktion ermöglicht die Erstellung gemeinsamer Arrays, auf die mehrere Prozesse gleichzeitig zugreifen können. Um auf diese Arrays als Numpy-Arrays zuzugreifen, können Sie numpy.frombuffer() verwenden, ohne dass ein Datenkopieraufwand entsteht.
Beispiel:
import multiprocessing as mp import numpy as np def f(shared_arr): arr = np.frombuffer(shared_arr.get_obj()) arr[:] = -arr[:] if __name__ == '__main__': N = 10 shared_arr = mp.Array(ctypes.c_double, N) arr = np.frombuffer(shared_arr.get_obj()) # Create, start, and finish child processes p = mp.Process(target=f, args=(shared_arr,)) p.start() p.join()
In diesem Beispiel verwendet die Funktion f() ein gemeinsam genutztes Array, um eine elementweise Negation durchzuführen. Durch den Zugriff auf das Array als Numpy-Array erhalten Sie Zugriff auf alle leistungsstarken Operationen und Methoden.
Synchronisierung:
Wenn mehrere Prozesse auf dasselbe gemeinsam genutzte Array zugreifen, erfolgt die Synchronisierung ist entscheidend, um Konflikten vorzubeugen. mp.Array() bietet eine get_lock()-Methode, mit der Sie den Zugriff nach Bedarf synchronisieren können.
# ... def f(i): with shared_arr.get_lock(): # synchronize access arr = np.frombuffer(shared_arr.get_obj()) arr[i] = -arr[i]
Mit diesem Ansatz können Sie Numpy-Arrays in Multiprozessorumgebungen gemeinsam nutzen und gleichzeitig ihre volle Funktionalität als Numpy-Arrays beibehalten.
Das obige ist der detaillierte Inhalt vonWie kann ich NumPy-Arrays im Shared Memory effizient für die Mehrfachverarbeitung nutzen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!