Quiq::Parallel - Parallele Verarbeitung
Quiq::Object
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.
Quiq::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, ); Quiq::Parallel->runFetch(sub { my $i = shift; return $cur->fetch; }, sub { my ($row,$i) = @_; <$row verarbeiten> return; }, );
$class->runArray(\@elements,$sub,@opt);
Die Elemente, auf denen die Berechnung einzeln durchgeführt wird.
Die Subroutine, die für jedes Element in @elements ausgeführt wird.
Die gleichen wie runFetch().
nichts
$class->runFetch($fetchSub,$execSub,@opt);
Subroutine, die das nächste gefetchte Element liefert:
$e = $fetchSub->($i); # $i-ter Fetch-Aufruf
Subroutine, die für jedes gefetchte Element ausgeführt wird.
Gesamtanzahl der Fetches. 0 bedeutet, die Gesamtanzahl der Fetches ist (vorab) nicht bekannt.
Die maximale Anzahl parallel laufender Prozesse.
Verzeichnis, in das die Ausgaben der Prozesse auf STDOUT und STDERR geschrieben werden, jeweils in eine eigene Datei mit dem Namen
NNNNNN.out
Die sechstellige Zahl NNNNNNN ist die Nummer des Prozesses in der Aufrufreihenfolge.
Datei, in der die Ausgaben aller Prozesse (chronologische Aufrufreihenfolge) zusammengefasst werden. Dies geschieht nach Beendigung des letzten Prozesses. Wird '-' als Dateiname angegeben, wird die Ausgabe nach STDOUT geschrieben.
Zeige Fortschrittsanzeige an.
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.
Tipp: Die Anzahl der vorhandenen CPUs liefert die Methode
$n = Quiq::System->numberOfCpus;
Die Ausgaben der Prozesse auf STDOUT und STDERR werden in Dateien gespeichert, wenn Option -outputDir und/oder -outputFile angegeben sind.
1.152
Frank Seitz, http://fseitz.de/
Copyright (C) 2019 Frank Seitz
This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
To install Quiq, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Quiq
CPAN shell
perl -MCPAN -e shell install Quiq
For more information on module installation, please visit the detailed CPAN module installation guide.