Thread Programm beschleunigen (21 answers)
Opened by steve123 at 2012-05-21 21:01

topeg
 2012-05-21 22:41
#158456 #158456
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Du kannst mehrere Konvertierungsprozesse parallel starten. Das kann den Prozesse stark beschleunigen, besonders wenn man einen Mehrkern Prozessor hat.

ungetestet:
more (16.0kb):
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)

View full thread Programm beschleunigen