Как вы контролируете тайм-ауты 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"

Ответы на вопрос(3)

Ваш ответ на вопрос