Estou usando xargs
para chamar um script python para processar cerca de 30 milhões de arquivos pequenos. Espero usar xargs
para paralelizar o processo. O comando que estou usando é:
find ./data -name "*.json" -print0 |
xargs -0 -I{} -P 40 python Convert.py {} > log.txt
Basicamente, Convert.py
lerá em um pequeno arquivo json (4kb), processará e gravará em outro arquivo de 4kb. Estou executando em um servidor com 40 núcleos de CPU. E nenhum outro processo intenso de CPU está em execução neste servidor.
Ao monitorar o htop (btw, existe outra boa maneira de monitorar o desempenho da CPU?), Acho que -P 40
não é tão rápido quanto o esperado. Às vezes, todos os núcleos congelam e diminuem quase para zero por 3-4 segundos e depois se recuperam para 60-70%. Então, tento diminuir o número de processos paralelos para -P 20-30
, mas ainda não é muito rápido. O comportamento ideal deve ser a aceleração linear. Alguma sugestão para o uso paralelo de xargs?
xargs -P
e >
está se abrindo para condições de corrida devido ao problema de meia linha gnu.org/software/parallel/… O uso do GNU Parallel não terá esse problema.