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. ACHTUNG: Bricht das steuernde Programm ab, wird keine Ausgabe produziert. Die Ausgabedateien verschwinden mit dem temporären Verzeichnis, in dem sie gespeichert werden.
Zeige Fortschrittsanzeige an.
Liefere die Bezeichnung des Elements für die Fortschrittsanzeige. Dies ist erforderlich, wenn das Element ein Objekt ist. Beispiel:
-progressNameSub => sub { my $obj = shift; return $obj->bezeichnung; },
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.178
Frank Seitz, http://fseitz.de/
Copyright (C) 2020 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.