Ich hatte keinen Bericht darüber, also werde ich eine Nachricht hinterlassen.
In Python können Sie mit dem Standardmodul Multiprocessing parallele Berechnungen durchführen. Hardware-Parallelberechnung wie GPU wird nicht unterstützt, es handelt sich lediglich um eine Multiprozessverarbeitung auf der CPU.
Die Elemente der Liste der gepoolten Argumente werden an die Argumente der Funktion übergeben, die Sie parallel verarbeiten möchten.
Wenn Sie ein Skript schreiben, das auf globale Variablen in einer parallel verarbeiteten Funktion verweist, sieht es wie folgt aus.
example.py
import multiprocessing as mp
a = 0
def init_global():
global a
a = 100
def func(proc):
global a
print("Inside MultiProcess: ", proc, a)
return a
if __name__ == "__main__":
print("Before Change", a)
init_global()
print("After Change", a)
pool = mp.Pool(4)
callback = pool.map(func, range(4))
pool.terminate()
pool.join()
print(sum(callback))
Ergebnis Wie Sie sehen, können Sie auf eine normale Funktion (init_global) verweisen und diese zuweisen, aber Sie können nicht auf eine globale Variable in einer Funktion verweisen, die parallel verarbeitet wird.
Wenn Sie wirklich auf den Wert der globalen Variablen in der Parallelverarbeitungsfunktion verweisen möchten, müssen Sie anscheinend das Argument des Aufrufers angeben. (Wenn Sie mehrere Argumente übergeben möchten, müssen Sie einen Taple generieren.)
example.py
import multiprocessing as mp
a = 0
b = 1111
def init_global():
global a
a = 100
def func(proc):
print("Inside MultiProcess: ", proc[0], proc[1])
return proc[0]
if __name__ == "__main__":
print("Before Change", a)
init_global()
print("After Change", a)
pool = mp.Pool(4)
args = [(a,b) for i in range(4)]
callback = pool.map(func, args)
pool.terminate()
pool.join()
print(sum(callback))
Ergebnis Ich konnte es übergeben.
Möglicherweise gibt es eine geeignete Methode, aber ich konnte sie nicht finden. Bitte melden Sie, ob es eine bessere Methode gibt.
Recommended Posts