2014-12-24 100 views
12

我有一個很大的問題: 我的python軟件運行的服務器的路由器似乎存在一些硬件問題。與數據庫的連接大約每三次都是成功的。因此,在得到超時異常之前,psycopg2.connect()最多可能需要5分鐘。Python psycopg2超時

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) 

我嘗試了一些超時添加的查詢,但沒有幫助,因爲連接沒有得到建立。

有沒有辦法,我可以立即停止程序,當無法建立連接?

回答

18

當使用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例外。

+0

要先評論一下,雖然這可能值得一提的新問題:在我的情況下,我得到超時以及此提示:「服務器是否在主機上運行」xxxxxx.xxxxxx.us-west-1.rds。 amazonaws.com「(xx.x.xxx.xxx)並接受端口5432上的TCP/IP連接?'。那些答案確實是對的。事實上,我可以在同一個工具的節點變體中建立連接,但仍然無法通過我編寫的'psycopg2'版本進行連接。 – kuanb