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?
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
.