Comando de processamento paralelo por lote

1

Então, eu tenho 10 núcleos de CPU e 20 dados para processar. Eu quero processar os dados em paralelo, mas temo que, se eu processar 20 de uma só vez, cause algum problema. Então, eu quero processar 10 dados 2 vezes. Existe algum comando para fazer isso?

Adicione informações:

Os dados estão no formato de arquivo. É bastante grande, por arquivo pode chegar a 10GB. Em minha experiência, se eu lançar mais de 10 processos, o PC se tornará realmente lento e até atrasado. Então estou limitando o processo a ser apenas 10, que é igual ao número de núcleos. Quanto à minha memória RAM, acredito que o software que processa o arquivo não carregará tudo de uma vez, de modo que o uso de RAM seja bastante baixo. É por isso que preciso apenas paralelizar o processo para cada 10 dados. Por enquanto, eu gero 10 scripts de shell que executam paralelos e cada script de shell contém comandos sequenciais.

    
por Bharata 07.11.2018 / 06:46

2 respostas

2

Usando o GNU Parallel:

parallel my_process {} ::: files*

Isso executará um my_process file por thread da CPU.

Você pode dizer ao GNU Parallel para ter certeza de que há 10G de RAM livre antes de iniciar o próximo trabalho:

parallel --memfree 10G my_process {} ::: files*

Se a mem livre ficar abaixo de 5G, o GNU Parallel irá matar o trabalho mais recente e reiniciá-lo quando houver 10G livre novamente.

    
por 07.11.2018 / 11:50
2

gnu paralelo pode fazer isso. No Debian, faça apt-get install parallel . Então leia o manual.

O paralelismo do Gnu funciona como xargs , mas melhora com a decisão de iniciar mais processos paralelos.

( make também pode fazer isso.)

    
por 07.11.2018 / 09:27