如何在Perl和/或C中池化Shell进程

时间:2016-03-29 16:03:06

标签: python c perl parallel-processing fork

我正在寻找与Python的

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

为了从28的列表中一次运行8个shell命令,但我不想使用整个机器并伤害同事的工作。我找到了perl的

use Thread::Queue;

use Parallel::ForkManager;

use Forks::Super;

但我对使用外部库/包/模块非常犹豫,因为我过去曾经遇到过糟糕的经历。我也很难从这些软件包中获得最少的工作示例。

有人可以提供一个标准(没有外部库/包/模块)的方式在C或Perl中进行python的池处理而不调用外部库吗?

-DC

2 个答案:

答案 0 :(得分:1)

Forks::Super作者:

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;

答案 1 :(得分: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;
}