2014-01-21 5 views
2

Я хочу запустить кучу процессов, называемых Perl, но хочу только запустить 8 за раз (количество ядер на моей машине). Например:Отслеживание фоновых процессов?

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

Это будет работать 20 потоков процесса, но я бы запускать из CPU и/или памяти. Я хочу запустить 8 для начала, а затем, когда процесс завершится, запустите еще один, пока не будет завершено.

Что такое простой способ сделать это?

+3

Parallel :: ForkManager – ysth

+0

Ваш запрос путает два понятия. Обрабатывает потоки VS. – user3183018

+0

И задачи. Нужно ли их выполнять как разные процессы? – flup

ответ

2

Вы можете попробовать использовать wait bultin (см perlfunc (1)): справочную страницу

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

Но нет никакой гарантии, что процессы будут равномерно распределены между процессорами.

+1

Спасибо! Работает как шарм и очень умный! – thc

0

Я хотел бы предложить, глядя на резьбе perldoc http://perldoc.perl.org/threads.html

Подсчитайте свои темы. Когда один заканчивает, а затем сделать новый поток и просто держать # нитей < = 8.

Это не может в равной степени распределить нагрузку, но это позволит вам запускать несколько параллельных задач, и вы можете ограничить количество вы хотите запустить.

Смежные вопросы