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

topeg
 2012-05-22 15:10
#158478 #158478
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
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:
more (18.8kb):
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.

View full thread Programm beschleunigen