Bonjour,

Je me permet de poster car je dois ré-écrire un programme en python et je débute avec ce langage.

Mon application, dont le code allégé figure ci-dessous, se charge d'échanger des informations avec un port COM USB. Cette partie fonctionne bien.
J'ai voulu rajouter une détection de connexion/déconnexion du port COM. Il ne me semble pas que la librairie PYSERIAL permette ce genre de chose, mais je me trompe peut-être. Du coup je fais du polling...

Ma première question est : Peut-on faire la même chose de manière plus élégante ?

Pour ce polling, j'ai utilisé maladroitement les Threads,, enfin plus précisément les Timers. Ca fonctionne bien, mais à chaque appel de ma méthode "connexionPIC", la quantité de mémoire occupée par le script python augmente, et après plusieurs heures Windows 7 m'affiche une erreur.
Je pense que le problème vient du fait que ma fonction s'appelle, d'une certaine façon, elle-même. Un delete bien placé pourrait peut-être solutionner le problème, mais je ne sais pas comment l'utiliser correctement (mais essais sont restés infructueux).

Ma seconde et dernière question est donc : Comment empêcher cette fuite de mémoire qui, sur le long terme, est pénalisante ? L'utilisation de thread peut-elle être évitée ? (sachant qu'en parallèle, d'autres event de l'utilisateur peuvent survenir)


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
class APPLI(object):
 
	def __init__(self):
		#Blablabla
		#...
		#...
		self.win.mainloop()
 
	#Connexion au port com
	def connexionPIC(self):
		self.threading = threading
		self.threading.timer = self.threading.Timer(0.5,self.connexionPIC)
		self.threading.timer.start()
 
		VID = 0x04D8
		PID = 0x000A
 
		device_list = list_ports.comports()
		port = None
		for device in device_list:
			if(device.vid == VID and device.pid == PID):
				port = device.device
				break
		if (port!=None):
			print("Port COM trouvé")
 
test = APPLI()
test.threading.timer.cancel()
test.threading.Thread.join
Merci d'avance pour les pistes que vous saurez me donner !