É seguro canalizar a stdout de A para B em paralelo?

6

Estou executando A file | B --params > file.txt . Como desejo acelerar a velocidade de processamento, usei o parallel -j+0< a.txt para executar 20 trabalhos simultaneamente. a.txt contém todos os comandos:

A file1 | B --params > file1.txt 

A file2 | B --params > file2.txt

A fileN | B --params > fileN.txt

É assim seguro? A stdout de diferentes programas será afetada quando executada em paralelo?

    
por Sean 10.06.2014 / 18:21

3 respostas

9

Will the stdout from different programs be messed when running in parallel?

Não se forem todos processos independentes gravados em arquivos separados, o que parece ser - cada instância de B é distinta e é gerada em seu próprio lugar.

    
por 10.06.2014 / 18:53
2

Desde que cada instância de B seja gravada em arquivos diferentes, você ficará bem. No entanto, a segurança dessa abordagem depende, em última análise, de B.

Por exemplo, eu fui mordido por programas mal codificados no passado, ao tentar fazer algo semelhante à sua solução. No meu caso, o programa usou srand(time(NULL)) e, em seguida, escreveu em um arquivo temporário rand() -based. Isso quebrou horrivelmente quando 10 instâncias do programa foram iniciadas ao mesmo tempo, já que todas elas escreveram no mesmo arquivo temporário.

Contanto que seu programa não contenha esse tipo de erro e não grave em algum caminho fixo, você deve estar OK.

    
por 11.06.2014 / 01:38
1

A única situação em que isso é não seguro é se A ou B escreverem em um recurso que esteja codificado no programa (por exemplo, / etc / passwd).

Mas para a grande maioria dos programas que não são o caso. Por isso, será seguro executá-los em paralelo.

    
por 10.06.2014 / 22:28