Bonjour à toutes et à tous,

Je viens vers vous car j'ai besoin d'aide sur mon code en python. Etant un néophyte, j'ai énormément de mal à comprendre le multithreading, et comment je pourrais l'implémenter dans mon programme.

Premièrement, ce que je souhaiterais réaliser, est une boucle lisant chaque colonne d'une base de donnée SQLlite3 (je penses avoir réussi cette partie ^^).

Cependant (et c'est la ou je bloque), à l’intérieur de cette boucle, je souhaiterais exécuter un script indépendant, en parallèle, lisant chacune de ces colonnes.Ce script devra être appelé à chaque ligne du tableau SQL

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
 
class Lecture_BDD_SQL ():
    def __init__ (self):
        pass
 
    def lecture_db(self,): 
    #   Lis les bases de donnees et execute la requete 
        try:                
            os.chdir('P:\\Test_Python\\Operationnel\\RequeteSQL\\BDD')
            #creation curseur
            connect_table_test = sqlite3.connect('Test.db')
            curseur_test = connect_table_test.cursor()
            #voit tous les ligne presente dans la bdd
            #curseur_requete.execute("SELECT Id,Ref,Utilisateur,Environment,Requete,Frequence FROM Table_requete")
            curseur_test.execute("SELECT * FROM Test")
            #recuperation des informations de chaque colone par ligne
            maliste = curseur_test.fetchall()
            for ligne in maliste :  
                self.ma_liste_test(ligne)#----------------------------------------------> Process qui doit etre en parallele independant
            curseur_test.close()
            connect_table_test.close()
        except AttributeError as Ae :
            print("Erreur d'attribut: \n {}".format(Ae))
        except EnvironmentError as EnE :
            print(EnE)
        except SyntaxError as SyE :
            print("Une erreur dans la syntaxe est survenue : \n {}".format(SyE))        
        except ImportError as ImE:
            print("Le module implementer est introuvable : \n {}".format(ImE))
 
    def ma_liste_test(self,*maliste):
        '''
            Lecture de la liste et execution de la requete vers la base de donnée concernée
        '''
        une_liste = maliste
        for colonne in une_liste:
            id_req = colonne[0]
            ref = colonne[1]
            username = colonne[2]
            env_req = colonne[3]
            query_req = colonne[4]
            frequenece_req = colonne[5]
            url_req = colonne[6]
            port_req = colonne[7]
            host_req = colonne[8]
            nombase_req = colonne[9]             
 
           #creation d'un dsn makedsn('Host Name', 'Port Number', nom_base ='Service Name')
           dsn_oracle = cx_Oracle.makedsn(host_req,port_req,service_name = nombase_req  )
           #connexion à la BDD 
           db = cx_Oracle.connect(user = username, dsn = dsn_oracle )
           curseur = db.cursor()
 
           #execution de la requete
           try:
                 data_oracle = curseur.execute(query_req)                                
                except cx_Oracle.DatabaseError as exc:
                error, = exc.args
                print("Oracle-Error-Code:", error.code)
                print("Oracle-Error-Message:", error.message)
                #recuperation des resultats de la requete
                resultats = data_oracle.fetchall()
                print(resultats)
                curseur.close()
                time.sleep(frequenece_req)
                #enregistrement du resultat dans la BDD 
                os.chdir('P:\\Test_Python\\Operationnel\\RequeteSQL\\BDD')
                #creation ichier sauvegarde
                fichier = open("SaveRequest.txt","a")
                fichier.write("====================================================\n" ) 
                heure =  datetime.now()
                fichier.write("heure actuelle: \n{heureactuelle} \n".format(heureactuelle = heure))
                fichier.write("La requete appelée:\n{requete} \n".format(requete = query_req) )
                fichier.write("Resultats de la requête : \n{result}\n".format(result = resultats))
J'ai aussi entendu parler du multiprocessing et du ThreadPoolExecutor mais je ne vois pas lequel utiliser ^^