Pregunta

He heredado el mantenimiento de una computación científica utilizando pitón paralelo en un clúster. Con Python paralelo, los trabajos se envían a un PPServer, que (en este caso) habla con procesos PPServer que ya están en otras computadoras, distribuyendo tareas a los procesos de PPWorkers.

Me gustaría utilizar el módulo de registro de la biblioteca estándar para registrar errores y depurar información de las funciones que se envían a un PPServer. Dado que estos trabajadores PP se ejecutan como procesos separados (en computadoras separadas) no estoy seguro de cómo estructurar correctamente el registro. ¿Debo iniciar sesión en un archivo separado para cada proceso? ¿Quizás hay un controlador de registro que lo mejoraría todo?

Además, quiero informes sobre qué proceso sobre qué computadora ha presentado un error, pero el código en el que estoy escribiendo el registro probablemente no sea consciente de estas cosas; ¿Quizás eso debería estar sucediendo a nivel de PPServer?

(Versión de la pregunta Postada cruzada en foros paralelos de Python, publicaré una respuesta aquí si obtengo algo allí sobre esto de un usuario no así)

¿Fue útil?

Solución

Una forma de resolver su problema es hacer lo siguiente:

  1. En cada proceso de trabajador, use un logging.handlers.SocketHandler Para enviar eventos del trabajador a un proceso de registrador dedicado.
  2. Cree un proceso de registrador dedicado que escuche los eventos de registro en un socket, basado en el ejemplo de trabajo dado en los documentos en https://docs.python.org/3/howto/logging-cookbook.html#sending-and-------reciving-logging-events-across-a-network
  3. Lucro ;-)

Si atrapa excepciones en las funciones de su trabajador y las registra, entonces debería poder obtener visibilidad de los errores en todos los trabajadores en un solo lugar.

Otros consejos

Usaría Python's logging y socket Apis. Solo sigue el ejemplo aquí.

Simplemente comience un ppworker dedicado a registrar en algún lugar y crear un nuevo logging.Logger en cada uno de los otros trabajadores con un logging.SocketHandler especificando el nombre de host y el puerto de la máquina que ejecuta el registro ppworker.

Si tiene un servidor syslog en ejecución, también puede usar Python's syslog módulo, que está documentado aquí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top