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)
Merci d'avance pour les pistes que vous saurez me donner !
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
Partager