我正在python中编写一个代码,我在其中建立了与数据库的连接。我在循环中有查询。在循环中执行查询时,如果我拔下网络电缆,它应该以异常停止。但这并没有发生,当我再次插入网络电缆2分钟后,它再次从它结束的地方开始。我正在使用linux和psycopg2。它没有显示异常
答案 0 :(得分:2)
您的数据库连接几乎肯定会基于TCP套接字。 TCP套接字将在失败之前长时间重试并且(在python中)引发异常。更不用说和重试/在数据库层中自动重新连接尝试。
答案 1 :(得分:2)
道格拉斯的答案说,由于TCP,它不会引起异常。
您可以尝试使用socket.setdefaulttimeout()来设置更短的超时值。
setdefaulttimeout(...)
setdefaulttimeout(timeout) Set the default timeout in floating seconds for new socket objects. A value of None indicates that new socket objects have no timeout. When the socket module is first imported, the default is None.
但是,如果您的数据库连接不是由python套接字构建的,则可能无效,例如,本机套接字。
答案 2 :(得分:1)
如果要实现无论客户端库如何连接到服务器的超时工作,最好在单独的线程中尝试数据库操作,或者更好的是,单独的进程,“监视”线程/如果需要,过程可以杀死;请参阅Python 2.6标准库中的多处理模块(如果需要,可以使用2.5的反向移植版本)。一个进程更好,因为当它被杀死时,操作系统将负责解除分配和清理资源,而杀死一个线程总是一个非常不安全和混乱的业务。