我想运行Perl调用的一堆进程,但只希望一次运行8个(我的机器上的核心数)。例如:
for ( my $i = 1; $i <= 20; $i++) {
my $command = `some_process $i &`;
}
那将运行该进程的20个线程,但是我将耗尽CPU和/或内存。我想以8开始运行,然后当进程完成时,启动另一个进程直到20完成。
这是一种简单的方法吗?
答案 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。
这可能不会平均分配负载,但它会让你运行 几个并发任务,您可以限制您想要运行的任务数。