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.
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:
client.close()
para cerrar la conexión después de usarla.exec_command
también? También puede agregar un parámetro detimeout
a esa función para asegurarse de que el comando no se ejecute durante demasiado tiempo.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.