Как вы контролируете тайм-ауты MySQL из SQLAlchemy?
Как правильно контролировать время ожидания с клиента при работе с базой данных MySQL с использованием SQLAlchemy?connect_timeout
Параметр URL кажется недостаточным.
Меня больше интересует, что происходит, когда машина, на которой работает база данных, например, неожиданно исчезает из сети. Я не беспокоюсь о том, что сами запросы занимают слишком много времени.
Следующий скрипт выполняет то, что вы ожидаете (то есть время ожидания составляет приблизительно одну секунду), еслиsomehost недоступенbefore while
петля когда-либо достигнута. Но еслиsomehost идет внизduring while
Цикл (например, попробуйте выдернуть сетевой кабель после запуска цикла), тогда время ожидания, по-видимому, займет не менее 18 секунд. Есть ли какая-то дополнительная настройка или параметр, который я пропустил?
Не удивительно, чтоwait_timeout
переменная сеанса не работает, так как я думаю, что это переменная на стороне сервера. Но я бросил это туда, чтобы убедиться.
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"