繁体   English   中英

python中的数据库连接

[英]db connection in python

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

您的数据库连接几乎可以肯定是基于TCP套接字的。 TCP套接字会在尝试失败并引发python异常之前徘徊很长一段时间。 更不用说数据库层中的重试/自动重新连接尝试。

正如道格拉斯的回答所说,它不会因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套接字(例如本机套接字)建立的,则可能无法正常工作。

如果要实现无论客户端库如何连接到服务器都可以使用的超时,则最好在单独的线程中尝试数据库操作,或者最好在单独的进程中尝试,“监控”线程/进程可能会杀死该数据库操作如果需要的话; 请参阅Python 2.6标准库中的多处理模块(如果需要,可以使用2.5的向后移植版本)。 进程是更好的方法,因为当它被杀死时,操作系统将负责分配和清理资源,而杀死线程始终是非常不安全和混乱的业务。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM