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)

Foi útil?

Solução

Uma maneira de resolver seu problema é fazer o seguinte:

  1. Em cada processo de trabalhador, use um logging.handlers.SocketHandler enviar eventos do trabalhador para um processo de madeireiro dedicado.
  2. 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
  3. 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top