Próba wymuszenia ponownego połączenia

0

Witam,
chcąc nawiązać połączenie z bazą danych wykorzystuje tego typu kod:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import psycopg2
import sys

db_host = 'localhost'
db_name = 'testdb'
db_user = 'janbodnar'

con = None

try:
     
    con = psycopg2.connect(host=db_host, database=db_name, user=db_user) 
    cur = con.cursor()
    cur.execute('SELECT version()')          
    ver = cur.fetchone()
    print ver    
    

except psycopg2.DatabaseError, e:
    print 'Error %s' % e    
    sys.exit(1)
    
    
finally:
    
    if con:
        con.close()

Chciałbym teraz wprowadzić mechanizm ponownej próby nawiązania połączenia w momencie problemów.. Chodzi głównie o listę hostów
['domena.pl','180.200.10.100','localhost'] i dla tej listy chciałbym ponawiać po kolei próby połączenia.. Jak coś takiego osiągnąć ? Robić to w pętli ? o-o

0

Polecam zapoznać się z czymś takim jak zdarzenia. Są one kluczowe w większych projektach(jak i tych mniejszych) i na pewno rozwiążą Twój problem.
http://pl.wikipedia.org/wiki/Programowanie_sterowane_zdarzeniami
Ale tak na szybko nie wchodząc bardziej w wszystkie tajniki programowania:

//pseudo kod
while(polaczenie.udane == true){ //petla bedzie powtarzana az w koncu sie nie polaczysz z baza
     polaczenie.polacz(host, pass, user);
}
 

Sorki ze w C++ pseudokod, ale chodzi o same rozwiązanie.

0

Tak, tylko tutaj mi chodzi o konkretną sytuacje.. czyli o Pythona i o driver do postgresqla psycopg2.

Z tego co zauważyłem, przy nieudanej próbie połączenia z metody connect() wyrzucany jest wyjątek i następuje zakończenie wykonywania dalszej części skryptu.

Rozwiązałem to w sposób, który mi się mało podoba, ale działa .. -.-

hosts = ['adres1','adres2','adres3']

# Try to connect
for h in hosts:
    try:
        conn_remote=psycopg2.connect(host=h,database=remote_dbname,user=remote_user,password=remote_passwd)

    except Exception:
        continue
0

Skoro zauważyłeś, że wyrzuca wyjątek, to może wklej błąd? xd

1 użytkowników online, w tym zalogowanych: 0, gości: 1