Ich möchte Joblimits für die LSF commandbsub
in meinem Perl-Skript, das LSF-Jobs unter der Haube startet, programmieren. Wenn ich etwa 2000 Jobs habe, möchte ich zu jeder Zeit höchstens 20 Jobs haben. Ich habe Scripte gesehen, die 20 Jobs starten und danach warten, bis alle fertig sind, bevor weitere 20 gestartet werden.Wie kann ich mehrere Jobs aus einer großen Warteschlange gleichzeitig in Perl ausführen?
7
A
Antwort
11
Mehrere vorhandene Perl-Module, einschließlich Parallel::ForkManager
und Forks::Super
(von denen ich der Autor bin) bieten diese Funktionalität an.
Es gibt auch ein LSF::JobManager
Modul, über das ich nichts anderes weiß.
Parallel :: ForkManager Skelett
use Parallel::ForkManager;
$pm = new Parallel::ForkManager(20);
foreach $job (@jobsToRun) {
$pm->start and next;
system("bsub -K $job"); # bsub -K job to wait until job finishes, right?
$pm->finish;
}
Und in Forks :: Super-
use Forks::Super MAX_PROC => 20;
foreach $job (@jobsToRun) {
fork { cmd => "bsub -K $job" };
}
das ist großartig! vielen dank – Gordon
Nach all den Jahren, in denen ich LSF benutzt habe, habe ich gerade über 'bsub -K 'gelernt. Vielen Dank! –