NAME
Prty::Parallel - Parallele Verarbeitung
BASE CLASS
EXAMPLE
Minimales Veranschaulichungsbeispiel: Lasse 50 Prozesse für jeweils eine Sekunde schlafen. Die Ausführungsdauer beträgt ungefähr 50/Anzahl CPUs Sekunden, da immer Anzahl CPUs Prozesse parallel ausgeführt werden.
Prty::Parallel->runArray([1..50],sub {
my ($elem,$i) = @_;
sleep 1;
return;
});
Bei großen Datenmengen oder wenn die Gesamtmenge vorab nicht bekannt ist, bietet sich die Methode $class->"runFetch"() an. Hier ein Beispiel mit einer unbekannt großen Datenbank-Selektion:
my $cur = $db->select("
<SELECT Statement>
",
-cursor => 1,
);
Prty::Parallel->runFetch(sub {
my $i = shift;
return $cur->fetch;
},
sub {
my ($row,$i) = @_;
<$row verarbeiten>
return;
},
);
METHODS
Parallele Berechnung
runArray() - Führe Subroutine parallel über Arrayelementen aus
Synopsis
$class->runArray(\@elements,$sub,@opt);
Arguments
- @elements
-
Die Elemente, auf denen die Berechnung einzeln durchgeführt wird.
- $sub
-
Die Subroutine, die für jedes Element in @elements ausgeführt wird.
Options
- -maxProcesses => $n (Default: Anzahl der CPUs des Rechners)
-
Die maximale Anzahl parallel laufender Prozesse.
- -progressMeter => $bool (Default: 0)
-
Zeige Fortschrittsanzeige an.
Returns
nichts
runFetch() - Führe Subroutine parallel über gefetchten Elementen aus
Synopsis
$class->runFetch($fetchSub,$execSub,@opt);
Arguments
- $fetchSub
-
Subroutine, die das nächste gefetchte Element liefert:
$e = $fetchSub->($i); # $i-ter Fetch-Aufruf
- $execSub
-
Subroutine, die für jedes gefetchte Element ausgeführt wird.
Options
- -maxFetches => $n (Default: 0)
-
Gesamtanzahl der Fetches. 0 bedeutet, die Gesamtanzahl der Fetches ist (vorab) nicht bekannt.
- -maxProcesses => $n (Default: Anzahl der CPUs des Rechners)
-
Die maximale Anzahl parallel laufender Prozesse.
- -progressMeter => $bool (Default: 0)
-
Zeige Fortschrittsanzeige an.
Returns
nichts
Description
Verarbeite die Elemente, die von Subroutine $fetchSub geliefert werden, mit der Subroutine $execSub mit parallel laufenden Prozessen. Per Default wird für die Anzahl der parallelen Prozesse die Anzahl der CPUs des ausführenden Rechners gewählt. Mit der Option -maxProcesses kann eine abweichende Anzahl gewählt werden.
Tip: Die Anzahl der vorhandenen CPUs liefert die Methode
$n = Prty::System->numberOfCpus;
VERSION
1.122
AUTHOR
Frank Seitz, http://fseitz.de/
COPYRIGHT
Copyright (C) 2018 Frank Seitz
LICENSE
This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.