Você viu --pipe
para o Paralelo GNU?
cat bigfiles* | pv | parallel --pipe -S server1,server2 'cat | process_pipe'
(gato incluído para ênfase)
O padrão é o tamanho de bloco de 1 MB, que pode ser ajustado com --block.
- editar para correspondência 1-1 -
Com base no acima, você pode obter uma correspondência 1-1 como esta:
parallel --eta "cat {} | parallel --pipe -S server1,server2 'cat | process_pipe' > {}.out" ::: bigfiles*
(gato incluído para ênfase)
Não é ideal, pois o paralelo interno não saberá sobre seus irmãos e, portanto, poderá gerar mais em server1 que em server2. Uma maneira de evitar isso é -j1 no paralelo externo, mas isso não será o ideal se o interior tiver blocos suficientes para o primeiro servidor. Em outras palavras: Para equilibrar perfeitamente sua carga de trabalho, você pode ter que mexer um pouco com isso - talvez até mesmo usar - carregar 100% ou similar.
--- editar: lidar com falhas ---
Se o process_pipe
retornar com um erro, isso deve ser repetido 2 vezes mais:
parallel --retries 3 --eta "cat {} | parallel --pipe -S server1,server2 'cat | process_pipe' > {}.out" ::: bigfiles*