2014-12-24 19 views
12

Ho un problema enorme: Sembra che ci siano alcuni problemi hardware sul router del server su cui gira il software python. La connessione al database ha successo solo una volta ogni tre volte. Quindi un psycopg2.connect() può richiedere fino a 5 minuti prima di ottenere un'eccezione di timeout.Timeout psycopg2 Python

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 

Questo è il codice che sto usando.

# 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) 

ho provato alcune aggiunte di timeout per la query, ma che non ha aiutato, in quanto la connessione non ha ottenuto stabilito a tutti.

C'è un modo, posso interrompere immediatamente il programma, quando la connessione non può essere stabilita?

risposta

18

Quando si utilizza la sintassi degli argomenti delle parole chiave per la funzione connect è possibile utilizzare uno qualsiasi dei parametri di connessione supportati da libpd. Tra coloro c'è connect_timeout in secondi:

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

Un timeout di connessione solleva un'eccezione OperationalError.

+0

Prima di commentare, anche se questo potrebbe meritare nuove domande: Nel mio caso sto ottenendo il timeout, così come questo prompt: 'È il server in esecuzione su host" xxxxxx.xxxxxx.us-west-1.rds. amazonaws.com "(xx.x.xxx.xxx) e accettando le connessioni TCP/IP sulla porta 5432?'. La risposta è sì sì a quelli. In effetti, posso effettuare la connessione in una variante del nodo di questo stesso strumento, ma non riesco a connettermi tramite la versione 'psycopg2' che ho scritto. – kuanb