0

我正在用 python 编写代码,在其中建立了与数据库的连接。我有一个循环的查询。在循环中执行查询时,如果我拔下网络电缆,它应该停止并出现异常。但这不会发生,当我在 2 分钟后再次插入网络电缆时,它会从结束的地方重新开始。我正在使用 linux 和 psycopg2。它没有显示异常

4

3 回答 3

2

您的数据库连接几乎肯定会基于 TCP 套接字。TCP 套接字将在失败和(在 python 中)引发异常之前重试很长时间。更不用说在数据库层重试/自动重新连接尝试。

于 2009-05-15T06:11:53.147 回答
2

正如道格拉斯的回答所说,它不会因 TCP 而引发异常。

您可以尝试使用 socket.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 套接字构建的,例如本机套接字,它可能无法工作。

于 2009-05-15T06:18:49.683 回答
1

如果您想实现无论客户端库如何连接到服务器都有效的超时,最好在单独的线程中尝试 DB 操作,或者更好的是,在单独的进程中,“监视器”线程/进程可以杀死如果需要的话; 请参阅 Python 2.6 标准库中的多处理模块(如果需要,有 2.5 的反向移植版本)。一个进程更好,因为当它被杀死时,操作系统将负责释放和清理资源,而杀死一个线程总是一件非常不安全和混乱的事情。

于 2009-05-15T07:43:58.307 回答