Ausgabe
Beispiel:
import multiprocessing as mp
counter = mp.Value('i', 0)
def test_fun(i):
global counter
with counter.get_lock():
counter.value += 1
def main():
global counter
with mp.Pool(4) as p:
result = p.map(test_fun, range(4))
print(counter.value)
if __name__ == "__main__":
main()
Die erwartete Ausgabe ist 4, da der Wert geteilt wird, aber auf dem Mac 0 ausgibt.
Es funktioniert unter Linux oder unter Verwendung, fork
aber ich möchte, dass es mit Spawn funktioniert.
Lösung
Verschieben Sie einfach die Counter-Deklaration in Ihre Hauptfunktion und legen Sie sie dann als globale Variable innerhalb des Kinder-Initialisierers fest, genauso wie es unter Windows gemacht wird.
import multiprocessing as mp
def setup_fn(value):
global counter
counter = value
def test_fun(i):
global counter
with counter.get_lock():
counter.value += 1
def main():
counter = mp.Value('i', 0)
with mp.Pool(4, initializer=setup_fn, initargs=(counter,)) as p:
result = p.map(test_fun, range(4))
print(counter.value)
if __name__ == "__main__":
main()
Beantwortet von – Ahmed AEK
Antwort geprüft von – Dawn Plyler (FixError Volunteer)