Thread Logikaufbau bei Parallel::ForkManager (36 answers)
Opened by bianca at 2013-09-27 10:20

Raubtier
 2013-09-28 00:26
#170736 #170736
User since
2012-05-04
1054 Artikel
BenutzerIn

user image
2013-09-27T18:38:41 bianca
Frage 1: Ich hätte erwartet, dass die Ausgabe "Warte auf Auftraege" eigentlich jede Sekunde kommt, denn $config->{poll_interval} steht auf 1 und die Methode run_on_wait() verstehe ich als Anweisung für das Warten auf Kinder. Wo liegt mein Denkfehler?
Quote
If $period is defined, then $code is called periodically and the module waits for $period seconds between the two calls.


Du quotest den unwichtigen Teil. Interessanter ist ja, wann die Funktion überhaupt aufgerufen wird:
Quote
You can define a subroutine which is called when the child process needs to wait for the startup


Ok, ist vielleicht nicht so ganz klar, aber der Quelltext hat so wenige Zeilen, den hättest du dir auch mal anschauen können. Wenn du 5 Kinder hast und alle laufen und du maximal 5 Prozesse willst, dann wird beim Start des nächsten gewartet. Zusätzlich scheint das eben beim wait_children aufgerufen zu werden.

Setz doch die max_processes mal auf 2 und baue zusätzlich im Kind ein "sleep 20" ein - dann siehst du die Meldung.

Quote
Frage 2: Warum kommt die Ausgabe "Sohn '-3072' ist beendet" erst nach Ende des gesamten Programms? Der Sohn macht doch außer einem print nichts und müsste doch sofort nach seinem Start terminieren. Wo liegt hier der Fehler?
Quote
You can define a subroutine which is called when a child is terminated. It is called in the parent process.


run_on_finish nimmt einen Parameter, nämlich die PID des Kindes...
Oder eben nix/0 für den Elternprozess.

Quote
Frage 3: Aus der Doku verstehe ich diesen Satz nicht:
Quote
The "and next" skips the internal loop in the parent process.

Mein Script verhält sich nicht anders, wenn ich "and next" weg lasse. Warum?


Es wird nicht "die "Fehler, kann Sohnprozess nicht starten" ausgegeben? Das wundert mich.

PS: Achtung, habs nicht getestet, sondern nur schnell in den Sourcecode geschaut.

View full thread Logikaufbau bei Parallel::ForkManager