web-dev-qa-db-fra.com

Python délai d'attente psycopg2

J'ai un gros problème: il semble y avoir des problèmes matériels sur le routeur du serveur sur lequel mon logiciel python fonctionne. La connexion à la base de données est réussie environ une troisième fois. Donc, un psycopg2 .connect () peut prendre jusqu'à 5 minutes avant que j'obtienne une exception de délai d'attente.

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

C'est le code que j'utilise.

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

J'ai essayé quelques ajouts de délai d'attente pour la requête, mais cela n'a pas aidé, car la connexion n'a pas été établie du tout.

Existe-t-il un moyen, je peux arrêter le programme immédiatement, lorsque la connexion n'a pas pu être établie?

21
gulden

Lorsque vous utilisez la syntaxe des arguments de mots clés pour la fonction connect, il est possible d'utiliser n'importe lequel des paramètres de connexion pris en charge libpd. Parmi ceux-ci, il y a connect_timeout en secondes:

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 délai de connexion déclenche une exception OperationalError .

33
Clodoaldo Neto