Processos trabalhadores de registro com python paralelo
-
25-09-2019 - |
Pergunta
Eu herdei a manutenção de alguma computação científica usando python paralelo em um cluster. Com o Python paralelo, os trabalhos são enviados a um PPServer, que (neste caso) fala com processos de PPSserver já que já realizam outros computadores, distribuindo tarefas para os processos da PPWorkers.
Eu gostaria de usar o módulo de log da biblioteca padrão para registrar erros e depurar informações das funções que são enviadas para um PPServer. Como esses ppworkers são executados como processos separados (em computadores separados), não tenho certeza de como estruturar corretamente o log. Devo fazer login em um arquivo separado para cada processo? Talvez haja um manipulador de madeira que melhoraria tudo?
Além disso, quero relatórios sobre qual processo em que computador atingiu um erro, mas o código que estou escrevendo o login provavelmente não está ciente dessas coisas; Talvez isso deva estar acontecendo no nível do PPSserver?
(Versão da pergunta postada nos fóruns paralelos do Python, postarei uma resposta aqui se conseguir algo sobre isso de um User So So So)
Solução
Uma maneira de resolver seu problema é fazer o seguinte:
- Em cada processo de trabalhador, use um
logging.handlers.SocketHandler
enviar eventos do trabalhador para um processo de madeireiro dedicado. - Crie um processo de registrador dedicado que escuta os eventos de registro em um soquete, com base no exemplo de trabalho dado nos documentos em https://docs.python.org/3/howto/logging-cookbook.html#sending-and-receiving-logging-vents-across-a-network
- Lucro ;-)
Se você pegar exceções nas funções do seu trabalhador e registrá -las, poderá obter visibilidade de erros em todos os trabalhadores em um só lugar.
Outras dicas
Eu usaria o Python logging
e socket
APIs. Basta seguir o exemplo aqui.
Basta começar um ppworker
dedicado a fazer login em algum lugar e criar um novo logging.Logger
em cada um dos outros trabalhadores com um logging.SocketHandler
Especificando o nome do host e a porta da máquina executando o registro ppworker
.
Se você tem um servidor syslog em execução, também pode usar o Python's syslog
módulo, que está documentado aqui.