跟踪后台流程?

时间:2014-01-21 23:56:23

标签: multithreading perl

我想运行Perl调用的一堆进程,但只希望一次运行8个(我的机器上的核心数)。例如:

for ( my $i = 1; $i <= 20; $i++) {
        my $command = `some_process $i &`;
}

那将运行该进程的20个线程,但是我将耗尽CPU和/或内存。我想以8开始运行,然后当进程完成时,启动另一个进程直到20完成。

这是一种简单的方法吗?

2 个答案:

答案 0 :(得分:2)

您可以尝试使用wait bultin(请参阅perlfunc(1)联机帮助页):

for ( my $i = 1; $i <= 20; $i++) {
  wait if $i > 8;
  my $command = `some_process $i &`;
}

但无法保证流程将在处理器之间均匀分配。

答案 1 :(得分:0)

我建议查看线程perldoc http://perldoc.perl.org/threads.html

计算你的主题。当一个完成,然后创建一个新的线程 并保持线程数&lt; = 8。

这可能不会平均分配负载,但它会让你运行 几个并发任务,您可以限制您想要运行的任务数。