Wenn ein Prozess an eine Liste angehängt wird (aber nichts damit getan wird), ändert sich das Programmverhalten

8

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%     
tjm 05.11.2011, 20:38
quelle

1 Antwort

1

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)

    
Mihai Stan 06.11.2011 17:31
quelle