Wie steuern Sie MySQL-Timeouts in SQLAlchemy?

Wie können Timeouts vom Client aus gesteuert werden, wenn eine MySQL-Datenbank mit SQLAlchemy ausgeführt wird? Dasconnect_timeout URL-Parameter scheint nicht ausreichend zu sein.

Mich interessiert eher, was passiert, wenn der Computer, auf dem die Datenbank ausgeführt wird, beispielsweise unerwartet aus dem Netzwerk verschwindet. Ich mache mir keine Sorgen, dass die Abfragen selbst zu lange dauern.

Das folgende Skript führt das aus, was Sie erwarten (d. H. Zeitüberschreitung nach ungefähr einer Sekunde), wennIrgendwie ist nicht verfügbarVor daswhile Schleife ist immer erreicht. Aber fallsIrgendwie sinktwährend daswhile Schleife (z. B. versuchen Sie, das Netzwerkkabel herauszuziehen, nachdem die Schleife gestartet wurde), dann scheint die Zeitüberschreitung mindestens 18 Sekunden zu dauern. Gibt es eine zusätzliche Einstellung oder einen zusätzlichen Parameter, den ich vermisse?

Es ist nicht verwunderlich, dass diewait_timeout Sitzungsvariable funktioniert nicht, da ich denke, dass das eine serverseitige Variable ist. Aber ich habe es da reingeworfen, nur um sicherzugehen.

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"

Antworten auf die Frage(3)

Ihre Antwort auf die Frage