Thread Programm beschleunigen
(21 answers)
Opened by steve123 at 2012-05-21 21:01
Wie lange läuft den das Konvertierungsprogramm? Es laufen immer 10 Programme gleichzeitig. Wenn jedes eine Minute braucht dann sind das immer noch 14.000 Minuten was das Script läuft.
Hast du mal im Prozessmanager geschaut wie groß die Auslastung deines System ist? Du kannst ja Testausgaben in das Script setzen um zu schauen was passiert. Ich bin recht überzeugt davon, das das Script nicht "hängt" sondern auf das beenden der Kindprozesse wartet. Und du hast mir bisher nicht gesagt das es anders ist. Das Konvertierungsprogramm kann ich nicht beschleunigen. Hier das Script mit Debugmeldungen: 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 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 #!/usr/bin/perl use strict; use warnings; use File::Spec; my $gsc = 'C:\Program Files\gs\gs9.05\bin\gswin64c.exe'; my $dpi = '150'; my $txt = '4'; my $bld = '4'; my $ein='C:\Lokale Daten\vbv tiffs\Work\Spool\\'; my $aus='C:\Lokale Daten\vbv tiffs\Work\Tiff\\'; # 10 Prozesse gleichzeitig starten my $max_run=10; my @cmd=($gsc,'-q', '-dSAFER', '-dNOPAUSE', '-dBATCH', '-sDEVICE=tiffg4', '-r'.$dpi, '-dTextAlphaBits='.$txt, '-dGraphicsAlphaBits='.$bld); # PID aller laufenden Kindprozesse my %running; # Kommandos die auf Ausfühung warten. my @waiting; # bendete Kindprozesse terminieren $SIG{CHLD}=sub{ my $pid=wait(); delete($running{$pid}); }; die("Error open $ein ($!)\n") unless (opendir(my $dh,$ein)); while (my $Eintrag = readdir($dh)) { my $infile = File::Spec->join($ein,$Eintrag); next if(-d $infile); if($Eintrag =~ /\.ps$/) { my $outfile = File::Spec->join($aus,$Eintrag.'.tif'); print "ADD $infile\n"; my @c=@cmd; push(@c,'-sOutputFile="'.$outfile.'"'); push(@c,'-f "'.$infile.'"'); push(@waiting,\@c); } Start(\%running,\@waiting,$max_run); } closedir($dh); my $last=-1; while(@waiting || %running) { Start(\%running,\@waiting,$max_run); select(undef,undef,undef,0.10); my $now=int(@waiting/100); if($now != $last) { $last=$now; print "TIME:".localtime()."\n"; print "WATITING FOR EXEC: ".@waiting."\n" ; print "PROCESSES RUNNING: ".keys(%running)."\n"; print "\n"; } } ######################################################################## ######################################################################## sub Start { my $run=shift; my $wait=shift; my $max=shift; while(keys(%$run) < $max) { return unless(@$wait); my $cmd=shift(@$wait); print "START: ".join(' ',@$cmd)."\n"; my $pid=fork(); die("Fork Failed $!\n") unless(defined($pid)); unless($pid) { exec(@$cmd); die("EXEC Failed"); } $run->{$pid}=1; } } Ich weiß nicht warum ich dir das machen muss. |