[Threading] [Pyserial]Problème de fuite mémoire
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:
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 !