Thread Effizienz bei Durchsuchen einer Datei nach mehreren Regex
(5 answers)
Opened by Sven_123 at 2011-05-10 14:59
Vielen Dank auch dir und wer - ich guck deinen Thread gleich nochmal durch. Bezüglich qr// kann ich nun sagen, dass es in meinem Fall nichts bringt (schätzungsweise zu viele kurze Dateien mit ca. 1000 Zeilen, statt einer langen, wo sich die Vorarbeit lohnt). Allerdings hab ich auch festgestellt, dass es Jacke wie Hose ist, wie ich das ganze mach, weil's vielleicht ne Minute Unterschied macht, insgesamt, beim Auswerten von Rechnungen, die über Tage, oder Wochen laufen...
Bin in Gwendragons letztem link auf das Benchmark-Modul gestoßen und musste es gleich ausprobieren. Falls es wen interessiert, Script und Ergebnisse: 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 Benchmark; timethese(100000 => { normal => sub { open my $in, "< molpro.out" or die "geht nicht\n"; my ($r1,$r2,$r3) = (1,1,0); while (<$in>){ if (($r1) && (/^\s*?!MCSCF STATE (\d+).1 ENERGY/)){my $x = $1} if (($r2) && (/^\s*?SA-MC GRADIENT FOR STATE (\d+).1/)){my $x = $1} if (($r3) && (/^\s*?SA-MC NACME FOR STATES (\d+).1 - (\d+).1/)){my $x = $1} } }, mit_qr => sub { open my $in, "< molpro.out" or die "geht nicht\n"; my ($r1,$r2,$r3) = (1,1,0); my $re1 = qr/^\s*?!MCSCF STATE (\d+).1 ENERGY/; my $re2 = qr/^\s*?SA-MC GRADIENT FOR STATE (\d+).1/; my $re3 = qr/^\s*?SA-MC NACME FOR STATES (\d+).1 - (\d+).1/; while (<$in>){ if (($r1) && (/$re1/)){my $x = $1} if (($r2) && (/$re2/)){my $x = $1} if (($r3) && (/$re3/)){my $x = $1} } }, extra => sub { my ($r1,$r2,$r3) = (1,1,0); my $re1 = qr/^\s*?!MCSCF STATE (\d+).1 ENERGY/; my $re2 = qr/^\s*?SA-MC GRADIENT FOR STATE (\d+).1/; my $re3 = qr/^\s*?SA-MC NACME FOR STATES (\d+).1 - (\d+).1/; if ($r1){ open my $in, "< molpro.out" or die "geht nicht\n"; while (<$in>){ if (/$re1/){my $x = $1} } } if ($r2){ open my $in, "< molpro.out" or die "geht nicht\n"; while (<$in>){ if (/$re2/){my $x = $1} } } if ($r3){ open my $in, "< molpro.out" or die "geht nicht\n"; while (<$in>){ if (/$re3/){my $x = $1} } } }, }); Code: (dl
)
1 Benchmark: timing 100000 iterations of extra, mit_qr, normal... |