8

Tengo una secuencia de comandos python que usa multiprocesamiento y subproceso para ejecutar múltiples comandos externos en paralelo con diferentes argumentos. El código se puede encontrar here.Python dentro de la pantalla GNU eventualmente queda inactivo si la pantalla está destrabada

Para mayor comodidad, inicio este script dentro de una sesión de pantalla de GNU. La máquina donde se ejecuta esta secuencia de comandos tiene 12 procesadores que están inactivos hasta que los procesos se activen.

Cada uno de los procesos tarda entre unas pocas horas a un par de días para ejecutarse, por lo tanto, a menudo me desconecto de la máquina y desconecto la sesión de la pantalla.

Sin embargo, recientemente he notado un comportamiento que nunca antes había experimentado. En varias ocasiones he regresado a la máquina para encontrarla inactiva con una carga de cero. Si obtengo una lista de procesos activos ya sea a través de ps ux o top, puedo encontrar la secuencia de comandos (y los subprocesos) en la lista de procesos. Luego vuelvo a conectar la sesión de la pantalla para verificar el estado del programa e inmediatamente se envía un nuevo lote de procesos a la cola y la carga del sistema vuelve a 12 en cuestión de segundos. Tenga en cuenta que no hice absolutamente nada con el script, salvo volver a conectar la sesión de pantalla.

He instalado una herramienta de supervisión en el sistema y lo que sucede es que algunos procesos finalizan después de cierto tiempo y no se inician nuevos procesos. Por lo tanto, el sistema está activo hasta que los subprocesos estén ocupados y quede inactivo tan pronto como no se liberen más trabajos de la cola.

Así que mi pregunta es, ¿alguien sabe de alguna razón que explica este comportamiento?

EDIT: Después de un año más o menos, este problema ya no es reproducible, ya sea un parche en la pantalla o la propia pitón. Estoy aceptando la respuesta, ya que proporciona buenas indicaciones para las pruebas.

+0

¿Puede decirnos qué versión de python y pantalla estaba usando cuando ocurrió el problema, y ​​qué versiones está utilizando ahora que el problema ya no ocurre? Tengo un problema muy similar yo mismo. – SpoonMeiser

+0

Lo siento SpoonMeiser, el problema fue hace mucho tiempo que ya no tengo esa información. Desde entonces comencé a usar tmux en lugar de pantalla. En cuanto a las soluciones, utilicé el registro de archivos en lugar de imprimir en stdout/stderr. – Unode

Respuesta

4

No puedo explicar el motivo de lo que está viendo. Sin embargo, tengo una idea de lo que puedes probar a continuación.

  1. Intente conectar la salida del script a: | tee out.txt Si eso no tiene ningún efecto, intente ...
  2. Pantalla de ejecución en otro host [hop]. Desde allí, SSH en su host trabajador. Ejecute su script en el shell no emulado. Luego, siéntase libre de desconectarse y reconectarse desde su salto para verificar el proceso. Esto debería ocultar al trabajador que esa pantalla está involucrada de todos modos.

Comente nuevamente con los resultados de estas pruebas. Eso me dará más para seguir.

+0

No estoy ejecutando exactamente lo que describiste en el paso 2 porque no quiero detener el script. En su lugar, lancé una pantalla en el host de salto, pasé al servidor y anexé la pantalla de los servidores. Luego separe la pantalla de salto dejando el servidor adjunto. – Unode

+0

Oh, buena llamada. ¡Me gusta! Buena suerte. –

+0

Con todo el cálculo ahora completo, el enfoque de 2 pantallas previno cualquier aparición adicional del problema. Sin embargo, todavía no entiendo las razones detrás de esto. Por lo tanto, me gustaría que las personas elaboren más posibilidades que expliquen lo que sucedió.En cualquier caso, +1 para la solución alternativa. – Unode

Cuestiones relacionadas