Salut,
j'ai une appli qui s'arrête aléatoirement avec le message "Python a cessé de fonctionner", je soupçonne un problème de thread.
A la base, l'appli créée une liste de StringVar. Elle lit un gateway can/usb et récupère les valeurs pour les mettre dans les variables associées grâce à un thread. Comme il s'agit de variables Tk, les valeurs sont automatiquement affichées dans des widgets dédiés. Un autre thread lit cycliquement les variables pour les stocker dans un fichier csv. Un dernier thread vérifie cycliquement que les variables sont régulièrement mise à jour, dans le cas contraire une exception "Capteur perdu" est déclenchée.
j'ai encapsulé les StringVar dans la classe ci-dessous pour éviter les problèmes d'accès simultané, mais rien à faire le problème persiste. Si quelqu'un a une idée...
A+
Pfeuh
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 import Tkinter as tk import threading class MONITOR_STRINGVAR(tk.StringVar): def __init__(self, *arg, **args): self.lock = threading.Lock() tk.StringVar.__init__(self, *arg, **args) def set(self, *args, **kwds): self.lock.acquire() retvar = tk.StringVar.set(self, *args, **kwds) self.lock.release() return retvar def get(self, *args, **kwds): self.lock.acquire() # do a real copy, not a pointer or a reference retvar = ''.join(tk.StringVar.get(self, *args, **kwds)) self.lock.release() return retvar
Partager