Jak kontrolujesz limity czasu MySQL z SQLAlchemy?

Jaki jest właściwy sposób kontrolowania limitów czasu, od klienta, gdy działa on na bazie MySQL, używając SQLAlchemy? Theconnect_timeout Parametr URL wydaje się być niewystarczający.

Bardziej interesuje mnie, co się dzieje, gdy maszyna, na której działa baza danych, np. Znika nieoczekiwanie z sieci. Nie martwię się, że same pytania trwają zbyt długo.

Poniższy skrypt robi to, czego można się spodziewać (tj. Limit czasu po około jednej sekundzie), jeślijakiś duch jest niedostępnyprzed while pętla jest kiedykolwiek osiągnięta. Ale jeślijakiś duch idzie w dółpodczas while pętla (np. spróbuj wyrwać kabel sieciowy po rozpoczęciu pętli), a następnie przekroczenie limitu czasu zajmuje co najmniej 18 sekund. Czy jest jakieś dodatkowe ustawienie lub parametr, którego brakuje?

Nic dziwnego, żewait_timeout zmienna sesyjna nie działa, jak sądzę, jest to zmienna po stronie serwera. Ale rzuciłem to tam, żeby się upewnić.

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"

questionAnswers(3)

yourAnswerToTheQuestion