Thread Logikaufbau bei Parallel::ForkManager
(36 answers)
Opened by bianca at 2013-09-27 10:20
Anhand der Beispiele in der Doku zum Modul erschließt sich mir noch nicht so recht der Aufbau bei Parallel::ForkManager
Es soll ein Vater dauernd nach Auftragsdateien pollen. Wenn eine da ist soll ein Sohn damit weiter arbeiten. Siehe auch fork() wirft Fehler Free to wrong pool (Windows) Aber dieses Script scheint eine Endlosschleife zu haben, denn es stürzt nach ein paar Sekunden ab. Was mache ich falsch? Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 #!/usr/bin/perl use strict; use warnings; use diagnostics; use Parallel::ForkManager 1.05; if (open(my $fh,'<','config.pl')) { my $config = eval do { local $/; <$fh>; }; die "Fehler, kann Konfigurationsdatei nicht verarbeiten '$@'\n" if $@; close($fh) or die "Fehler, kann Konfigurationsdatei nicht schliessen '$!'\n"; my $forkmanager = Parallel::ForkManager->new($config->{max_prozesse}); $forkmanager->run_on_start( sub { my ($pid,$file) = @_; print "Sohn '$pid' startet mit Datei '$file'\n"; }, ); $forkmanager->run_on_finish( sub { my ($pid) = @_; print "Sohn '$pid' ist beendet\n"; }, ); $forkmanager->run_on_wait( sub { print "Warte auf Aufträge\n" }, $config->{poll_interval}, ); my $lauf = 1; while ($lauf) { if (opendir my $vh,'.') { foreach my $file ( grep { $_ =~ /^[a-z0-9]\-auftrag.dat$/ && !-z $_ } readdir $vh ) { print "Datei $file gefunden\n"; rename($file,"$file-erl"); my $pid = $forkmanager->start($file) and next; # Sohn print "Hier meldet sich Sohn '$pid' von der Front\n"; $forkmanager->finish(); } } } $forkmanager->wait_all_children; } else { die "Fehler, kann Konfigurationsdatei nicht oeffnen '$!'\n"; } Code: (dl
)
1 Datei 1-auftrag.dat gefunden Kurz danach Absturz. 10 print "Hallo"
20 goto 10 |