[mac_prises] On s'assure que le minimum de connexions SQL soit fait.

This commit is contained in:
Pierre-Elliott Bécue 2013-02-03 01:14:20 +01:00
parent 777ba5cd9c
commit 6bc8ef3949
3 changed files with 39 additions and 10 deletions

View file

@ -7,6 +7,9 @@ import mac_prise
from threading import Thread
import time
sys.path.append('/usr/scripts/gestion')
import annuaires_pg
class ThreadWithReturnValue(Thread):
"""
Classe de threading qui récupère le "return" d'une fonction, et le renvoie avec
@ -18,13 +21,40 @@ class ThreadWithReturnValue(Thread):
self._return = None
def run(self):
"""
Méthode appelée par start.
On la réécrit pour que le retour soit non vide.
"""
if self._Thread__target is not None:
self._return = self._Thread__target(*self._Thread__args,
**self._Thread__kwargs)
def output(self):
"""
Renvoie la sortie de la fonction threadée.
"""
Thread.join(self)
return self._return
def get_curseur(temps):
"""
Au cas le nombre max de connexions est atteint.
"""
i = 0
while i <= 5:
try:
connecteur = psycopg2.connect(database="mac_prises", user="crans")
connecteur.set_session(autocommit=True)
break
except Exception as e:
print e
i += 1
time.sleep(3)
if i == 6:
raise EnvironmentError('Impossible de contacter la base postgresql')
else:
return connecteur.cursor()
if __name__ == '__main__':
"""
On envoie sur n threads les n arguments, puis on récupère les sorties
@ -35,16 +65,15 @@ if __name__ == '__main__':
threads = {}
output = {}
for switch in switches:
threads[switch] = ThreadWithReturnValue(target=mac_prise.liste_chambres_macs, args=(switch,))
threads[switch] = ThreadWithReturnValue(target=mac_prise.liste_chambres_macs, args=(switch, annuaires_pg))
threads[switch].start()
# On change de boucle, car il faut absolument que tous les threads aient démarré, histoire qu'on
# parallélise vraiment !
for switch in switches:
output[switch] = threads[switch].output()
connecteur = psycopg2.connect(database="mac_prises", user="crans")
connecteur.set_session(autocommit=True)
curseur = connecteur.cursor()
curseur = get_curseur(time.time())
requete = "INSERT INTO correspondance (date, chambre, mac) VALUES (%s, %s, %s);"