Im folgenden Programm, wenn ich den Prozess an eine Liste angehängt habe (eine scheinbar sinnlose Sache), läuft es wie erwartet. Aber wenn ich den Anhang entferne, wird der Destruktor der Prozesse viele Male aufgerufen, bevor er überhaupt ausgeführt wird. Es gibt nur n
-Konstruktionen, aber (n)(n+1)/2
(wobei n
die Anzahl der Prozesse ist) Zerstörungen. Dies lässt mich glauben, dass jeder Prozess in jeden neuen Prozess kopiert und dann sofort zerstört wird. Vielleicht funktioniert das Multiprocessing-Modul so. Es macht Sinn, da jeder Prozess eine Abzweigung der aktuellen ist. Aber welche Bedeutung hat das Anhängen an die Liste? Warum stoppt dieses Verhalten einfach?
Hier ist die Test- und Beispielausgabe:
%Vor%Beispielausgabe mit append:
%Vor%Beispielausgabe ohne Anhang:
%Vor%Das Hinzufügen des Objekts zu einer Liste verhindert, dass es in untergeordneten Prozessen gelöscht wird, da es nach dem Verzweigen "os._exit ()" aufruft, anstatt den gesamten Stapel zu löschen.
Der entsprechende Code befindet sich in multiprocessing / forking.py (Konstruktor von Popen, der auf "p.start ()" aufgerufen wird)
%Vor%Wo _bootstrap den neuen Prozess einrichtet und "run" aufruft (Code befindet sich in multiprocessing / process.py)
Tags und Links python python-3.x subprocess multiprocessing