Pausa todas as tarefas, exceto x com uso intensivo de CPU

0

Eu tenho cerca de 50 pastas de dados para processar, e eu tenho um script ruby que processa os arquivos de uma pasta (a pasta que processa é baseada em um arquivo de configuração .yml). E um computador com quatro CPUs.

Gostaria de poder iniciar os 50 processos, mas ter apenas 4 deles ativamente em execução a qualquer momento e ter os outros 46 em pausa. Quando um dos processos terminar, eu gostaria que um dos processos pausados fosse suspenso, até que todos os 50 fossem concluídos. Dessa forma, eu posso fazer

./super_script.rb > folder_1_log.txt
*edit config.yml*
./super_script.rb > folder_2_log.txt
*edit config.yml*
...

E concentre-se em outra coisa até que o processamento seja concluído.

É possível fazer isso? Existem alguns termos para o que eu estou querendo que eu possa google?

(Outra alternativa seria tornar o super_script capaz de multi-threading - talvez eu seja um gato assustado por não ter essa abordagem)

(O sistema operacional é Ubuntu Linux, e a maior parte do tempo da CPU não é ocupada pelo super_script.rb, mas por outros programas ruby que ele chama via system ())

    
por Andrew Grimm 15.07.2009 / 14:54

1 resposta

2

Aqui está um script bash que parece algo próximo do que você quer fazer - ele inicia vários processos em paralelo, mas garante que não mais do que n sejam executados ao mesmo tempo.

Por outro lado, se o que você está fazendo é vinculado ao disco, em vez de vinculado à CPU (estou perguntando porque você diz que tem "50 pastas de dados para processar"), então você pode realmente seja melhor executar todos os seus processos em série para evitar a contenção do disco entre os processos.

    
por 15.07.2009 / 15:20