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 :

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()
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...

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 !