2016-03-29 4 views
-1

ich suche ein Perl-äquivalent zu PythonsWie Shell Prozesse in Perl und/oder C

from multiprocessing import Pool 
... 
if __name__=='__main__': 
    pool = Pool(processes =2) 
    pool.map(Job,DATA) 

, um auf einmal 8 Shell-Kommandos auszuführen aus einer Liste von 28 bis Pool, aber ich weiß nicht Ich möchte die gesamte Maschine benutzen und die Jobs meiner Kollegen verletzen. Ich habe Perl

use Thread::Queue; 

und

use Parallel::ForkManager; 

und

use Forks::Super; 

gefunden, aber ich bin sehr zögerlich externe Bibliotheken/packages/Module zu verwenden, wie ich mit ihnen schlechte Erfahrungen gemacht haben in der Vergangenheit. Es fällt mir auch schwer, minimale Arbeitsbeispiele aus diesen Paketen zu bekommen.

Könnte jemand bitte eine Standardmethode (keine externe Bibliotheken/Pakete/Module) zur Verfügung stellen, um die Python-Pool-Verarbeitung in C oder Perl durchzuführen, ohne externe Bibliotheken aufzurufen?

-DC

+3

Warum bitten Sie uns, eines der perfekt aufgelisteten Module neu zu schreiben? Wie wird das eine bessere Erfahrung bieten? – ikegami

+2

"Ich zögere sehr, externe Bibliotheken/Pakete/Module zu verwenden, da ich in der Vergangenheit schlechte Erfahrungen mit ihnen gemacht habe" Ihr Zögern ist verständlich, aber Sie werfen das Kind mit dem Bade aus. Allgemein verwendete, gut gepflegte Module wie die von Ihnen aufgeführten sind in der Regel wesentlich robuster als Ihr eigener handgenerierter Code. Erfinde das Rad nicht neu. – ThisSuitIsBlackNot

+2

... im Allgemeinen, wenn Sie eine Bibliothek oder ein Dienstprogramm schreiben, um ding-X zu erreichen, möchten Sie ein tiefes Verständnis der vorhandenen Implementierungen ** zuerst ** haben. Wenn Sie nicht erreichen können, dass die bereits vorhandenen Implementierungen so funktionieren, wie Sie es beabsichtigen, werden Sie den Problembereich wahrscheinlich nicht gut genug verstehen, um Ihren eigenen zu erstellen. –

Antwort

1

Parallel::ForkManager.

use Parallel::ForkManager qw(); 
my $pm = Parallel::ForkManager->new(8); 
for my $cmd (@cmds) { 
    $pm->start and next; 
    exec($cmd) 
     or die; 
} 
1

Forks::Super Autor hier:

use Forks::Super MAX_PROC => 8; 
sub Job { ... } # function to perform task 
my @DATA = (...); # details about 28 tasks to perform 
foreach my $task (@DATA) { 
    fork { cmd => 'Job', args => $task }; 
} 
waitall; 
Verwandte Themen