Accès à des StringVar par threads
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:
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 |