Ich möchte ein 2D-numpy Array innerhalb einer for-Schleife füllen und die Berechnung mit Multiprocessing beschleunigen.
%Vor%Der Effekt der Ausführung ist, dass Python 4 Subprozesse ausführt und 4 CPU-Kerne belegt, ABER die Ausführung wird nicht beendet und das Array wird nicht gedruckt. Wenn ich versuche, das Array auf die Festplatte zu schreiben, passiert nichts.
Kann mir jemand sagen warum?
Folgendes funktioniert. Zuerst ist es eine gute Idee, den Hauptteil Ihres Codes in einem Hauptblock zu schützen, um seltsame Nebenwirkungen zu vermeiden. Das Ergebnis von poo.map()
ist eine Liste, die die Bewertungen für jeden Wert im Iterator list_start_vals
enthält, sodass Sie array_2D
nicht zuvor erstellen müssen.
vielleicht wirst du Probleme mit pool.close()
haben, aus den Kommentaren von @hpaulj kannst du diese Zeile entfernen, falls du Probleme hast ...
Wenn Sie die Array-Füllung weiterhin verwenden möchten, können Sie pool.apply_async
anstelle von pool.map
verwenden. Ausgehend von Saullos Antwort:
Dies läuft etwas langsamer als map
. Aber es erzeugt keinen Laufzeitfehler wie mein Test der Kartenversion: Exception RuntimeError: RuntimeError('cannot join current thread',) in <Finalize object, dead> ignored
Das Problem liegt daran, dass pool.map
in for-Schleife ausgeführt wird. Das Ergebnis der map () -Methode entspricht funktional der integrierten Zuordnung (), außer dass einzelne Tasks parallel ausgeführt werden.
In diesem Fall wird die pool.map (fill_array, list_start_vals) 20-mal aufgerufen und beginnt für jede Iteration der for-Schleife parallel zu laufen. Code unten sollte funktionieren
Code:
%Vor%Tags und Links python arrays numpy multiprocessing pool