A resposta curta é: não há.
Você já destacou as soluções alternativas necessárias para lidar com grandes dados enviados por um canal de subprocesso. O cachimbo "nice big elastic buffer" não existe. Isso é chamado na documentação do Python de gerenciamento de subprocesso como uma possível fonte de deadlocks , com a solução adicionada que você pode chamar proc.communicate()
para ler de stderr. O problema no seu caso é que você não pode chamar communicate()
em todos os processos ao mesmo tempo, e esse método bloqueia até que todos os dados sejam lidos.
Se fosse eu, provavelmente usaria uma chamada select()
em todos os processos stderr
em vez de um loop proc.poll()
. select()
pode bloquear até que qualquer processo faça alguma coisa, e quando o processo sair, ele irá fechar o stderr pipe, então você mata dois coelhos com uma cajadada (saiba quando os dados são gravados no stderr e saiba quando o processo morre). / p>