IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GTK+ avec Python Discussion :

Python plante lors du lancement d'un thread.


Sujet :

GTK+ avec Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    96
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2006
    Messages : 96
    Par défaut Python plante lors du lancement d'un thread.
    Bonjour,

    Je fais une petite appli qui entre autres, liste le contenu d'un répertoire dans un gtk.TreeView.

    L'appli marche très bien, j'ai voulu mettre en place un thread pour un affichage dynamique lors du chargement.

    Problème, le comportement de l'appli est aléatoire, soit cela fonctionne, le dossier est chargé, soit python plante est tout se ferme.
    Cela peut marcher plusieurs fois de suite, ou planter directement.

    J'ai cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $ python main.py 
    python: ../../src/xcb_lock.c*:33*:*_XCBUnlockDisplay:  L'assertion «*xcb_get_request_sent(dpy->xcb->connection) == dpy->request*» a échoué.
    Abandon
    Apparament un problème de lock, je n'en ai pas mis en place, mais je vois pas l'intéret puisque j'ai bloqué la possibilité de charger 2 dossiers en même temps.

    Une idée sur le sens de cette erreur ?

    Merci.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 119
    Par défaut
    Je ne suis pas sur, parce que ton mail ne donne pas beaucoup de detail, mais le probleme est classique dans une application graphique, il faut faire attention a la facon dont on interragit avec les composants graphiques depuis un thread. Donc l'idee est d'eviter d'appeler les methodes sur les composants graphiques, notamment celles qui induisent un repaint, depuis le thread.

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    96
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2006
    Messages : 96
    Par défaut
    merci de ta réponse, quelques détails donc :

    le programme est (ou plutot sera) un taggeur de mp3:

    Au lancement, il charge un dossier récursivement dans un treeview (sans threads, c'est assez rapide).

    lorsque je double clique sur un menu, il va récupérer la valeur des tags de tous les fichiers enfants (il s'arrête quand tous les tags sont différents), sans threads non plus.

    Des entrys me permettent de modifier les valeurs des tags, lorsque je clique sur enregistrer, un thread est lancé, qui va modifier la valeurs de tous les fichiers enfants.

    Donc l'idee est d'eviter d'appeler les methodes sur les composants graphiques, notamment celles qui induisent un repaint, depuis le thread.
    En gros je ne doit pas agir sur les éléments graphiques dans le thread enfant c'est bien ca ?

    Le seul élément graphique que mon thread enfant modifie c'est une barre de progression gtk, cela pourrait venir de la ?

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 119
    Par défaut
    Le seul élément graphique que mon thread enfant modifie c'est une barre de progression gtk, cela pourrait venir de la ?
    A mon avis oui. Essaye.

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Par défaut
    g_idle_add/g_timeout_add peuvent être utiles pour déporter des mises à jour graphiques du thread enfant vers le thread principal : les callbacks de ces 2 fonctions sont toujours invoqués dans le thread principal.

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    96
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2006
    Messages : 96
    Par défaut
    C'est une de ces deux fonctions que j'utilise, je n'ai pas le code sous les yeux.

    Il faut donc que je teste si le thread enfant tourne encore avec g_idle_add (avec une tite variable dans le thread enfant par exemple), et que je modifie mes éléments graphiques dans g_idle_add ?

    J'essaie ce soir

    merki

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme lors de lancement du start() (thread)
    Par jubaPython dans le forum Général Python
    Réponses: 14
    Dernier message: 03/01/2009, 20h08
  2. Réponses: 6
    Dernier message: 16/04/2007, 19h05
  3. Réponses: 3
    Dernier message: 05/03/2007, 09h26
  4. [JFileChooser] erreur lors du lancement ....
    Par Junecisco dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 29/03/2006, 10h09
  5. Suppression et lancement d'un thread en java
    Par noutnout53 dans le forum Concurrence et multi-thread
    Réponses: 3
    Dernier message: 13/03/2006, 11h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo