Ich versuche, eine gemeinsam genutzte Variable (numpy Array in einem Namespace) zu aktualisieren, wenn Sie das Multiprocessing-Modul verwenden. Die Variable wird jedoch nicht aktualisiert und ich verstehe nicht warum.Multiprocessing freigegebene Variable nicht aktualisieren
Hier ist ein Beispielcode dies zu verdeutlichen:
from multiprocessing import Process, Manager
import numpy as np
chunk_size = 15
arr_length = 1000
jobs = []
namespace = Manager().Namespace()
namespace.arr = np.zeros(arr_length)
nb_chunk = arr_length/chunk_size + 1
def foo(i, ns):
from_idx = chunk_size*i
to_idx = min(arr_length, chunk_size*(i+1))
ns.arr[from_idx:to_idx] = np.random.randint(0, 100, to_idx-from_idx)
for i in np.arange(nb_chunk):
p = Process(target=foo, args=(i, namespace))
p.start()
jobs.append(p)
for i in np.arange(nb_chunk):
jobs[i].join()
print namespace.arr[:10]
ok, aber wie konnte ich Vorteil, dass ich in jedem Prozess nicht auf den gleichen Speicherplatz des Arrays zugreifen kann? – GuillaumeA
Ähnlich wie Ihr aktueller Code, indem Sie sie als Argument an die Funktion übergeben ('foo()' in Ihrem Fall). Sie können [Mehrere asynchrone Funktionen ausführen und den zurückgegebenen Wert jeder Funktion abrufen] (http://stackoverflow.com/questions/40536287/running-multiple-asynchronous-function-and-get-the-returned-value-of-of- jedes-functi), die Frage, die ich in der Vergangenheit gestellt habe. Es hat eine Antwort mit der Verwendung von "Warteschlange" –