Python DBAPI время ожидания для соединений?

Я пытался проверить на наличие сбоя соединения, и, к сожалению, это не сбой, если 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 ответа

То, что вы испытываете, - это боль брандмауэров, а время ожидания - это обычное время ожидания TCP.

Обычно вы можете передать аргумент тайм-аута в функцию соединения. Если он не существует, вы можете попробовать с помощью socket.timeout или timeout по умолчанию:

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

Этот параметр будет применен ко всем выполняемым соединениям (на основе сокетов) и завершится ошибкой через 10 секунд ожидания.

Другие вопросы по тегам