python中的数据库连接

python中的数据库连接,python,tcp,database-connection,Python,Tcp,Database Connection,我正在用python编写一段代码,其中我与数据库建立了连接。我有一个循环中的查询。在循环中执行查询时,如果我拔下网络电缆,它将停止,并出现异常。但这并没有发生,当我在2分钟后再次插上网络电缆时,它又从它结束的地方开始。我正在使用linux和psycopg2。它没有显示异常您的数据库连接几乎肯定是基于TCP套接字的。TCP套接字将挂起很长一段时间,在失败之前重试,并(在python中)引发异常。更不用说在数据库层中重试/自动重新连接尝试。您的数据库连接几乎肯定基于TCP套接字。TCP套接字将挂起很

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

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

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

正如Douglas的回答所说,它不会因为TCP而引发异常

您可以尝试使用socket.setdefaulttimeout()设置较短的超时值

setdefaulttimeout(…)


但是,如果您的数据库连接不是由python套接字(例如,本机套接字)构建的,那么它可能无法工作。

正如Douglas的回答所说,它不会因为TCP而引发异常

您可以尝试使用socket.setdefaulttimeout()设置较短的超时值

setdefaulttimeout(…)


但是,如果您的数据库连接不是由python套接字(例如,本机套接字)构建的,则它可能不起作用。

如果您希望实现超时,而不管客户端库如何连接到服务器,都会起作用,那么最好在单独的线程中尝试DB操作,或者最好在单独的进程中尝试DB操作,这是一个“监视器”线程/进程可以在需要时终止;请参阅Python2.6标准库中的多处理模块(如果需要,2.5有一个后端口版本)。进程更好,因为当它被终止时,操作系统将负责释放和清理资源,而终止线程总是一件非常不安全和混乱的事情。

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

你能更详细地解释一下吗?从阅读开始,它解释了如何使用标准库中的多处理模块(2.6或更高版本的Python;如果您使用的是2.5,请从code.google.com/p/Python multiprocessing/安装backport)注释中没有太多的空间来提供更多的细节,但其思想是:创建两个队列quin和quout,使用队列创建一个进程,当您需要SQL查询时,将其推送到quin上,进程等待该队列,提取查询,执行查询,将结果推送到quout上;如果时间过长,请求进程将杀死另一个。你能解释一下吗更多详细信息,请阅读入门,其中说明了如何使用标准库中的多处理模块(2.6或更高版本的Python;如果您使用的是2.5,请从code.google.com/p/Python multiprocessing/安装后端口)。注释中没有太多空间来提供更多细节,但其思想是:创建两个队列quin和quout,使用队列创建一个进程,当您需要SQL查询时,将其推送到quin上,该进程等待该队列,提取查询,执行查询,将结果推送到quout上;如果时间过长,请求进程将杀死另一个。呼喊“紧急需要帮助”可能不是获得同情的最佳方式。高喊“紧急需要帮助”可能不是获得同情的最佳方式。
   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.