2014-12-24 11 views
12

Ich habe ein riesiges Problem: Es scheint einige Hardware-Probleme auf dem Router des Servers, auf dem meine Python-Software läuft, zu sein. Die Verbindung zur Datenbank ist nur etwa jedes dritte Mal erfolgreich. So kann ein psycopg2.connect() bis zu 5 Minuten dauern, bevor ich eine Ausnahme für das Zeitlimit bekomme.Python psycopg2 timeout

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 

Das ist der Code, den ich verwende.

Ich versuchte einige Timeout-Ergänzungen für die Abfrage, aber das hat nicht geholfen, da die Verbindung überhaupt nicht eingerichtet wurde.

Gibt es einen Weg, ich kann das Programm sofort stoppen, wenn die Verbindung nicht hergestellt werden konnte?

Antwort

18

Bei Verwendung der Schlüsselwortargumentsyntax zur connect-Funktion ist es möglich, einen der unterstützten Verbindungsparameter libpd zu verwenden. Unter denen gibt es connect_timeout in Sekunden:

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

eine Verbindungszeit heraus wirft eine OperationalError Ausnahme.

+0

Gehen Sie zuerst zu kommentieren, obwohl dies neue Fragen verdienen könnte: In meinem Fall bekomme ich die Zeitüberschreitung, sowie diese Aufforderung: 'Ist der Server auf dem Host ausgeführt" xxxxxx.xxxxxx.us-west-1.rds. amazonaws.com "(xx.x.xxx.xxx) und akzeptiert TCP/IP-Verbindungen an Port 5432?'. Die Antwort ist in der Tat ja zu denen. In der Tat kann ich die Verbindung in einer Knotenvariation desselben Werkzeugs herstellen, kann aber weiterhin keine Verbindung über die von mir geschriebene 'psycopg2'-Version herstellen. – kuanb