es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Paramiko ha agotado el tiempo a pesar de la actividad constante.

Tengo un script que utiliza Paramiko para crear una conexión SSH a un servidor y realiza consultas a algunos archivos varias veces por segundo. Ocasionalmente, el script se bloquea con un mensaje de error de tiempo de espera (TimeOut) sin un patrón evidente sobre cuándo ocurre esto durante la ejecución. Al intentar depurar y buscar posibles interrupciones en la actividad que podrían estar causando un tiempo de espera, descubro que el script parece estar enviando y recibiendo mensajes a una tasa bastante uniforme justo hasta el momento en que ocurre el error, y sin anomalías evidentes en los mensajes que se están pasando antes de que se interrumpa la conexión. Parece que sucede sin importar qué argumento de tiempo de espera le pase a la conexión inicial.

¿Hay algo obvio que me esté perdiendo aquí que pueda estar causando esto? No estoy seguro de qué código de muestra sería útil proporcionar en este caso, pero estaría feliz de agregar más detalles si fuese necesario. ¡Gracias!

EDITAR:

client = paramiko.SSHClient()
client.load_system_host_keys()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(-credenciales-)

while True:
    stdin, stdout, stderr = client.exec_command(command)
    data = stdin.readlines()
    print(data)

Este es un ejemplo muy simplificado del tipo de bucle que mi código ejecuta y parece que se bloquea con errores de tiempo de espera sin previo aviso.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Es difícil decir exactamente qué está causando el error de TimeOut sin más información y ejemplos de código, pero algunas cosas a considerar y posibles soluciones incluyen:

    • ¿Está cerrando correctamente la conexión SSH después de cada consulta, o la conexión se mantiene abierta indefinidamente? Si la conexión permanece abierta, podría provocar una acumulación de recursos que finalmente conduce a un tiempo de espera. Asegúrese de usar client.close() para cerrar la conexión después de usarla.
    • ¿Hay firewalls o interrupciones de red que podrían estar causando el tiempo de espera? Intente ejecutar el script en una configuración de red o firewall diferente para ver si persiste el error.
    • Mencionó que ha intentado ajustar el argumento de tiempo de espera para la conexión inicial, ¿pero ha intentado ajustar el argumento de tiempo de espera para exec_command también? También puede agregar un parámetro de timeout a esa función para asegurarse de que el comando no se ejecute durante demasiado tiempo.
    • ¿Existe la posibilidad de que el servidor simplemente esté sobrecargado o experimentando un alto tráfico durante los momentos en que ocurre el tiempo de espera? Si es así, es posible que deba intentar ejecutar el script en un momento diferente o considerar optimizar su consulta para que requiera menos recursos.

    En cuanto al código de ejemplo, el fragmento que proporcionó parece relativamente simple y no da demasiada información sobre el problema. Sería útil ver más del código que rodea este bucle while (por ejemplo, con qué frecuencia se ejecuta, qué otras funciones se llaman, etc.) para comprender mejor de dónde podría estar viniendo el problema.

Comments are closed.