Таймаут 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
.