¿Cómo controlas los tiempos de espera de MySQL desde SQLAlchemy?

¿Cuál es la forma correcta de controlar los tiempos de espera, desde el cliente, cuando se ejecuta contra una base de datos MySQL, utilizando SQLAlchemy? losconnect_timeout Parámetro de URL parece ser insuficiente.

Me interesa más lo que sucede cuando la máquina en la que se ejecuta la base de datos, por ejemplo, desaparece inesperadamente de la red. No me preocupa que las consultas en sí tomen demasiado tiempo.

La siguiente secuencia de comandos hace lo que cabría esperar (es decir, tiempo de espera después de aproximadamente un segundo) sien algún lugar no está disponibleantes de lawhile bucle siempre se alcanza Pero sien algún lugar bajadurante lawhile bucle (por ejemplo, intente extraer su cable de red después de que el bucle haya comenzado), entonces el tiempo de espera parece tardar al menos 18 segundos. ¿Hay algún ajuste o parámetro adicional que me falta?

No es de extrañar que lawait_timeout la variable de sesión no funciona, ya que creo que es una variable del lado del servidor. Pero lo tiré allí solo para asegurarme.

from sqlalchemy import *
from sqlalchemy.exc import *
import time
import sys

engine = create_engine("mysql://user:password@somehost/test?connect_timeout=1")
try:
    engine.execute("set session wait_timeout = 1;")
    while True:
        t = time.time()
        print t
        engine.execute("show tables;")
except DBAPIError:
    pass
finally:
    print time.time() - t, "seconds to time out"

Respuestas a la pregunta(3)

Su respuesta a la pregunta