Thread Programm beschleunigen
(21 answers)
Opened by steve123 at 2012-05-21 21:01
Du kannst mehrere Konvertierungsprozesse parallel starten. Das kann den Prozesse stark beschleunigen, besonders wenn man einen Mehrkern Prozessor hat.
ungetestet: 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 #!/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)) { next if($Eintrag eq "." or $Eintrag eq ".." or -d $Eintrag); if($Eintrag =~ /\.ps$/) { my $outfile = File::Spec->join($aus,$Eintrag.'.tif'); my $infile = File::Spec->join($ein,$Eintrag); my @c=@cmd; push(@c,'-sOutputFile="'.$outfile.'"'); push(@c,'-f "'.$infile.'"'); push(@waiting,\@c); } Start(\%running,\@waiting,$max_run); } closedir($dh); while(@waiting || %running) { Start(\%running,\@waiting,$max_run); select(undef,undef,undef,0.10); } ######################################################################## ######################################################################## sub Start { my $run=shift; my $wait=shift; my $max=shift; while(keys(%$run) < $max) { return unless(@$wait); my $cmd=shift(@$wait); my $pid=fork(); die("Fork Failed $!\n") unless(defined($pid)); unless($pid) { exec(@$cmd); die("EXEC Failed"); } $run->{$pid}=1; } } Last edited: 2012-05-21 22:45:56 +0200 (CEST) |