Logging com multiprocessamento em Python: uma solução robusta
Ao utilizar o módulo de multiprocessamento do Python, o log se torna mais complexo devido à falta de processamento bloqueios compartilhados para o criador de logs com reconhecimento de multiprocessamento, potencialmente levando à saída sys.stderr embaralhada.
Para enfrentar esse desafio, uma abordagem alternativa é criar um manipulador de log personalizado que direciona a saída para o processo pai por meio de um canal. Este método depende de uma fila para lidar com a simultaneidade e se recuperar de erros. A implementação fornecida garante o registro estável em ambientes de produção.
O manipulador personalizado, MultiProcessingLog, estende a classe logging.Handler e aproveita um RotatingFileHandler para lidar com o registro baseado em arquivo. Ele estabelece um canal entre os processos pai e filho, permitindo um armazenamento de log centralizado.
Detalhes de implementação:
O manipulador MultiProcessingLog emprega um thread separado para receber registros de log dos processos filhos e encaminhá-los para o RotatingFileHandler no processo pai. Isso garante que as mensagens de log sejam formatadas corretamente e gravadas no destino pretendido.
Para enviar registros de log, o método send é utilizado, enquanto o thread de recebimento monitora continuamente o canal em busca de novos registros e os encaminha para o _handler.
Para minimizar o risco de objetos não selecionáveis causarem problemas, o manipulador codifica os valores exc_info e args no registro de log antes de enviá-los pelo canal.
O método emit é substituído para encapsular a chamada _format_record em um bloco try-except para garantir que quaisquer falhas sejam tratadas adequadamente.
Esse manipulador de log personalizado fornece uma solução confiável para gerenciar logs em aplicativos de multiprocessamento, oferecendo armazenamento centralizado de logs e recursos de recuperação de erros.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3