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 секунд ожидания.