Bonjour à tous,
J'ai besoin de faire une multitude de requètes, rapidement, avec Python / Sqlite.
J'aurais donc besoin du multithreading.
J'ai créé une classe héritant de Thread, avec une méthode qui sélectionne un enregistrement dans la base de données, et qui update un champ 'working=1'.
Ensuite, je me sers de cet enregistrement pour d'autres opération.
Donc : Le problème est que, le temps que je fasse le select et que je le mettes à jour, le 2e thread a déjà sélectionné le même enregistrement.
Ainsi, par exemple :
Autre problème rencontré : Je suis obligé, dans la méthode 'execute', j'ouvrir, utiliser et fermer la base de données, sinon il semble se mélanger les pinceaux entre les différents threads...
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 class testeurThread(Thread): def __init__(self, task): Thread.__init__(self) self.task = task def run(self): if self.task == 1: self.testThread1() else: self.testThread2() def execute(self): self.database = sqlite3.connect(config.__DBNAME__) self.cursor = self.database.cursor() self.cursor.execute(query) self.cursor.close() def testThread1(): data = self.fetchall('SELECT * FROM test WHERE working = 0 LIMIT 1') for row in data: self.lockSite(test_id, 0) ## working self.lockSite(test_id, 1) def testThread2(): (...) thread_1 = Crawler(1) thread_2 = Crawler(1) thread_1.start() thread_2.start() thread_1.join() thread_2.join()
J'aurais trois petites questions subsidiaires, sachant que je commence en Python / Sqlite / Multithread
1/ Ma façon de faire est-elle bonne, à savoir : mettre tout le code dans la classe qui hérite de Thread ?
( sachant que dans les exemples que l'on voit sur le net, le code est toujours réduit au minimum, à croire qu'il faille en mettre le moins possible..)
2/ Chaque méthode a comme paramètre 'self'. Ca vous semble normal ?
3/ Au sujet des 'import' que l'on case en début de fichier : Je me retrouve, pour mon code, avec une quinzaine de fichiers à 'importer'. Ca vous semble normal ? Y a t-il une autre facon de faire ?
Merci d'avance !
Partager