Nous sommes sur le point de terminer une mise à jour très importante à notre application qui est construite avec python2.5 et Tkinter et l'erreur suivante est glissée dans tristement:Recherche de violations de fil avec Tkinter
alloc: invalid block: 06807CE7: 1 0 0
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
Nous avons vu cela avant et c'est généralement une erreur Tcl Interrupter causée quand un thread non GUI tente d'accéder à TK via Tkinter de toute façon (TK n'étant pas thread-safe). L'erreur apparaît à la fermeture de l'application, une fois que l'interruption Python est terminée avec notre code. Cette erreur est très difficile à reproduire et je pense que je vais devoir scanner tous les threads du système pour voir s'ils accèdent à TK quand ils ne le devraient pas. Je suis à la recherche d'un tour de magie en python pour vous aider à résoudre ce problème. Tous les widgets Tkinter que nous utilisons sont d'abord sous-classés et héritent de la propre classe de base Widget.
Dans cet esprit, je suis à la recherche d'un moyen d'ajouter le contrôle suivant au début de chaque méthode dans les sous-classes widget:
import thread
if thread.get_ident() != TKINTER_GUI_THREAD_ID:
assert 0, "Invalid thread accessing Tkinter!"
Décorateurs comme une solution partielle vient à l'esprit. Cependant, je ne veux pas ajouter manuellement des décorateurs à chaque méthode. Y at-il un moyen que je puisse ajouter le décorateur à toutes les méthodes d'une classe qui hérite de notre classe de base Widget? Ou y a-t-il une meilleure façon de faire tout cela? Ou est-ce que quelqu'un a plus d'informations sur cette erreur?
enter code here