Accueil » Python » Forums Python » Forum général Python » [Freezes] Python+Threads sous Windows

 • [Freezes] Python+Threads sous Windows

Document Actions
Réponses: 1   Visites: 0
Up one level
Vous devez être un membre enregistré pour contribuer sur ce forum. Inscrivez-vous maintenant

 • [Freezes] Python+Threads sous Windows

Posté par gslongo le 15/06/2008 12:10
Bonjour à tous,

je suis entrain de développer une application OpenSource en PyGTK+Glade. J'aimerais avoir une compatibilité Windows pour toucher plus de public. Jusqu'ici, tout a toujours bien fonctionné sous Linux et assez bien sous Windows. Mais aujourd'hui je me retrouve avec un problème que je ne comprends pas.

En fait, pour faire simple, j'ai une barre de progression (gtk.ProgressBarr) qui est mise à jour dans un thread (perso). Le truc c'est que quand j'entre dans mon thread, je fais un show() de ma progressbar et à la fin je fait un hide() mais ça a pour effet, sous Windows, de geler complètement mon interface.... plus moyen de rien faire, je suis obligé de tuer le processus... Or, sous Linux, tout fonctionne très bien !

Une idée ?
Merci !

 • Re: [Freezes] Python+Threads sous Windows

Posté par faide le 22/06/2008 03:21
Bonsoir,

Seul le main thread de GTK a le droit d'appeler des fonctions GTK. Sous Linux tu a de la chance car cela ne plante pas tout mais sous windows c'est quasi instantané.

Pour contourner le problème il faut mettre en place une Queue (from Queue import Queue) et surveiller cette queue depuis le main thread de GTK en faisant un:

import gobject
gobject.timeout_add(10, check_queue)

check_queue est un callable de ton cru qui fera ce que bon te semble et sera appelé a intervalle régulier par GTK.

Comme cela ce sera le thread de GTK qui appellera ta fonction check_queue et qui pourra alors interagir avec l'API GTK.

De l'autre coté ton thread devra déposer les éléments dans la queue au fur et a mesure qu'il les produira.

Simple, propre et multi-plateforme. Je fais ça dans toutes mes application GTK qui tournent sans problème sous windows.

Florent.