Таймаут python psycopg2

У меня огромная проблема: на маршрутизаторе сервера, похоже, возникают некоторые проблемы с оборудованием, на котором работает мое программное обеспечение python. Соединение с базой данных выполняется только каждый раз в третий раз. Таким образом, psycopg2.connect() может занять до 5 минут, прежде чем я получу исключение тайм-аута.

2014-12-23 15:03:12,461 - ERROR - could not connect to server: Connection timed out
    Is the server running on host "172.20.19.1" and accepting

Это код, который я использую.

# Connection to the DB
try:
    db = psycopg2.connect(host=dhost, database=ddatabase,
                          user=duser, password=dpassword)
    cursor = db.cursor(cursor_factory=psycopg2.extras.DictCursor)

except psycopg2.DatabaseError, err:
    print(str(err))
    logging.error(str(err))
    logging.info('program terminated')
    sys.exit(1)

Я попробовал несколько тайм-аутов для запроса, но это не помогло, так как соединение вообще не было установлено.

Есть ли способ, я могу немедленно остановить программу, когда соединение не может быть установлено?

Ответы

Ответ 1

При использовании синтаксиса аргументов ключевых слов для функции connect можно использовать любой из поддерживаемых libpd параметров подключения. Среди них есть connect_timeout в секундах:

db = psycopg2.connect (
    host=dhost, database=ddatabase,
    user=duser, password=dpassword,
    connect_timeout=3
)

http://www.postgresql.org/docs/current/static/libpq-connect.html#LIBPQ-PARAMKEYWORDS

http://initd.org/psycopg/docs/module.html

Тайм-аут соединения вызывает исключение OperationalError.