web-dev-qa-db-ja.com

Python psycopg2タイムアウト

私には大きな問題があります:サーバーのルーターにハードウェアの問題があるようですmy python software on on。データベースへの接続は約3回ごとに成功します。 .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)

クエリにタイムアウトをいくつか追加しようとしましたが、接続がまったく確立されなかったため、それは役に立ちませんでした。

接続を確立できなかったときにすぐにプログラムを停止する方法はありますか?

21
gulden

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 例外が発生します。

33
Clodoaldo Neto