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

Python Discussion :

Exception Thread 0x00000fa4 !?


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Développeur en formation
    Inscrit en
    Juillet 2013
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en formation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 300
    Points : 413
    Points
    413
    Par défaut Exception Thread 0x00000fa4 !?
    Bonjour, je bosse sur un même programme depuis longtemps, et je suis tombé sur une exception... bizarre. Il n'y a aucune explication "Pythonesque", j'espère que vous pourrez m'éclairer dessus.
    Merci d'avance.
    Images attachées Images attachées  
    Bouddha : Tout n'est qu'illusion en ce bas monde.
    Jésus : Tout est amour divin.
    Einstein : Tout est relatif dans cet espace-temps.
    Moi : Tout est binaire sur ce forum.

  2. #2
    Membre confirmé
    Avatar de Captain'Flam
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2011
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 273
    Points : 455
    Points
    455
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    pas facile de répondre avec aussi peu de détails...

    Tu pourrais nous donner l'extrait du code autour des lignes 223 et 1038.
    Tu pourrais aussi regarder le rapport d'erreur de microsoft (en cliquant sur le "cliquer ici").

    Tu as peut-être trop de threads qui tournent en même temps sur ta machine...
    Le système n'en supporte qu'un nombre limité (mais grand).
    Captain'Flam
    anciennement Sopsag, aka Hadrien
    Win seven x64 & Win 10 / Visual 2017 / Python 2.7 / Eclipse

  3. #3
    Membre averti
    Homme Profil pro
    Développeur en formation
    Inscrit en
    Juillet 2013
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en formation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 300
    Points : 413
    Points
    413
    Par défaut
    La ligne 1038, c'est tkinter. J'ai 2 ou 3 threads qui tournent mais le problème doit venir des sockets : j'ai une connexion sur laquelle j'envois un million d'octets tous les quarts de seconde. Au bout de 4 secondes, ça plante sur le receveur des données. (le serveur dans mon cas)
    Comment faire dans ce cas ? j'envois mes données alternativement sur plusieurs ports ?
    Bouddha : Tout n'est qu'illusion en ce bas monde.
    Jésus : Tout est amour divin.
    Einstein : Tout est relatif dans cet espace-temps.
    Moi : Tout est binaire sur ce forum.

  4. #4
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Une idée. Je n'ai pas vu le code, mais comme je lis les mots "tkinter", "thread" au sujet d'un crash, je me dis que tkinter n'est pas thread-safe". Autrement dit, il ne faut pas avoir d'instruction graphique dans les threads.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  5. #5
    Membre averti
    Homme Profil pro
    Développeur en formation
    Inscrit en
    Juillet 2013
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en formation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 300
    Points : 413
    Points
    413
    Par défaut
    Ah, je ne savais pas. Il y a en effet la modification d'un widget Canvas et également une boucle mainloop (pour que la fonction ne soit pas bloquante).
    Bouddha : Tout n'est qu'illusion en ce bas monde.
    Jésus : Tout est amour divin.
    Einstein : Tout est relatif dans cet espace-temps.
    Moi : Tout est binaire sur ce forum.

  6. #6
    Membre averti
    Homme Profil pro
    Développeur en formation
    Inscrit en
    Juillet 2013
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en formation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 300
    Points : 413
    Points
    413
    Par défaut
    Pourtant dans un autre programme les deux marchent très bien (je prends comme exemple le script qui affiche le flux de la webcam, dans contribuez)
    Bouddha : Tout n'est qu'illusion en ce bas monde.
    Jésus : Tout est amour divin.
    Einstein : Tout est relatif dans cet espace-temps.
    Moi : Tout est binaire sur ce forum.

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par stalacta Voir le message
    Pourtant dans un autre programme les deux marchent très bien (je prends comme exemple le script qui affiche le flux de la webcam, dans contribuez)
    Si c'est une question de cohabitation entre threads et GUI, les plantages dépendent de "race conditions". C'est comme au loto: on ne gagne pas a tous les coups.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Par défaut, tkinter doit tourner sur le thread principal.
    Une solution ?
    http://code.activestate.com/recipes/...safetkinterpy/

    mais vu la note, pas sur que ça marche ... peut être vaut il mieux passer tkinter sur le main thread et locker convenablement ?

  9. #9
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Avec les bibliothèques graphiques, souvent "non-thread-safe", il n'est pas toujours facile d'utiliser les threads lorsqu'il doivent avoir un effet sur le graphique (mise à jour d'une barre de progression par exemple).

    Il ya longtemps que je n'ai pas utilisé tkinter, mais je crois que le plus courant est d'assurer une communication avec une variable de type Queue (module Queue) qui est thread-safe. Cela nécessite de la part du graphique une surveillance de l'état de cette variable, afin de déclencher au bon moment les actions graphiques prévues.

    Avec PyQt, on a une autre solution. En utilisant une classe QThread, le thread devient capable d'envoyer des messages au graphique, chacun de ces messages lançant automatiquement à réception l'exécution d'une méthode graphique. C'est donc dans ce cas la boucle de traitement des évènements qui surveille et permet la communication entre le thread et l'IHM.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    Avec les bibliothèques graphiques, souvent "non-thread-safe", il n'est pas toujours facile d'utiliser les threads lorsqu'il doivent avoir un effet sur le graphique (mise à jour d'une barre de progression par exemple).
    Ce n'est pas spécifique au bibliothèques graphiques.
    Des qu'on a plusieurs threads qui doivent échanger des informations, ça passe toujours par un protocole d'envoi de messages et un mécanisme de sérialisation.
    Tk et Qt sont construits de la même façon: une eventloop qui dépile les événements qui déclenchent des callbacks. A partir de la, on peut utiliser l'eventloop comme "support" a la mécanique d'envoi de messages.
    Après, ce n'est que "détails" de mise en œuvre avec Qt on passera in fine par la methode .postEvent, avec Tk ce sera .after_idle.

    On a besoin de "plus" pour réaliser des appels de fonctions i.e. récupérer ce qui a été retourne par l’exécution du "message" dans le contexte de la thread appelée - ce qui est une mauvaise idée dans le cas général.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/11/2008, 22h46
  2. Exception Thread !
    Par halic dans le forum C#
    Réponses: 1
    Dernier message: 21/04/2007, 14h20
  3. [thread] Exception non catchée
    Par mammistegon dans le forum Concurrence et multi-thread
    Réponses: 3
    Dernier message: 22/11/2004, 21h43
  4. [Kylix] exception qtinft.dll et multi-threading
    Par leclaudio25 dans le forum EDI
    Réponses: 3
    Dernier message: 27/03/2003, 18h09
  5. Réponses: 5
    Dernier message: 12/06/2002, 15h12

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