gpt4 book ai didi

python - 你如何从 SQLAlchemy 控制 MySQL 超时?

转载 作者:太空狗 更新时间:2023-10-29 20:26:51 25 4
gpt4 key购买 nike

当使用 SQLAlchemy 针对 MySQL 数据库运行时,从客户端控制超时的正确方法是什么? connect_timeout URL 参数似乎不够。

我更感兴趣的是当运行数据库的机器突然从网络中消失时会发生什么。我不担心查询本身会花费太长时间。

如果 somehost while 期间不可用,则以下脚本会执行您期望的操作(即,大约一秒后超时)曾经达到循环。但是,如果 somehostwhile 循环期间 出现故障(例如,尝试在循环开始后拔掉它的网络电缆),那么超时似乎至少需要 18 秒。是否缺少某些其他设置或参数?

wait_timeout session 变量不起作用并不奇怪,因为我认为这是一个服务器端变量。但我把它扔在那里只是为了确定。

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"

最佳答案

由于 TCP 的工作方式,这是不可能的。如果另一台计算机断开网络连接,它只会停止响应传入的数据包。您看到的“18 秒”是您的 TCP 堆栈因无响应而超时。

获得所需行为的唯一方法是让计算机在死前立即生成一条“我快死了”的消息。如果死亡是意外的,那是完全不可能的。

你听说过心跳吗?这些是高可用性系统每秒或更短时间内相互发送的数据包,以让对方知道它们仍然存在。如果你想让你的应用程序“立即”知道服务器不见了,你首先要决定“立即”是多长时间(1秒,200毫秒等),然后设计一个系统(比如心跳)来检测什么时候另一个系统不再存在。

关于python - 你如何从 SQLAlchemy 控制 MySQL 超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1209640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com