连接的Python DB API超时?

时间:2010-03-01 11:23:20

标签: python python-db-api

我正在尝试测试连接失败,不幸的是,如果主机的IP地址是防火墙,它并没有失败。

这是代码:

def get_connection(self, conn_data):
    rtu, hst, prt, usr, pwd, db = conn_data  
    try:
        self.conn = pgdb.connect(host=hst+":"+prt, user=usr, password=pwd, database=db)
        self.cur = self.conn.cursor()
        return True
    except pgdb.Error as e:
        logger.exception("Error trying to connect to the server.")
        return False

if self.get_connection(conn_data):
    # Do stuff here:

如果我尝试连接到已知服务器但提供的用户名不正确,则会触发异常并失败。

但是,如果我尝试连接到没有响应的机器(防火墙),它永远不会通过self.conn = pgdb.connect()

当用户输入错误的IP地址时,如何等待或测试超时,而不是让我的应用程序显示挂起?

2 个答案:

答案 0 :(得分:0)

您遇到的是防火墙的痛苦,超时是正常的TCP超时。

答案 1 :(得分:0)

您通常可以在connect函数中传递timeout参数。如果它不存在,您可以尝试使用socket.timeout或default timeout

import socket
socket.setdefaulttimeout(10) # sets timeout to 10 seconds

这会将此设置应用于您所做的所有连接(基于套接字),并在等待10秒后失败。