SQLAlchemy を使用して MySQL データベースに対して実行するときに、クライアントからタイムアウトを制御する正しい方法は何ですか? connect_timeout
URL パラメータが不十分なようです。
データベースが実行されているマシンがネットワークから予期せず消えた場合などに、何が起こるかに興味があります。クエリ自体に時間がかかりすぎることは心配していません。
次のスクリプトは、ループに到達する前に一部のホストが利用できない場合に、予想されること (つまり、約 1 秒後にタイムアウト) を実行します。しかし、ループ中にホストがダウンした場合(たとえば、ループの開始後にネットワーク ケーブルを引っ張ってみてください)、タイムアウトには少なくとも 18 秒かかるようです。不足している追加の設定またはパラメーターはありますか?while
while
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"