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 :

NameError: global name 'thread' is not defined


Sujet :

Python

  1. #1
    Membre actif Avatar de Balbuzard
    Profil pro
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Points : 263
    Points
    263
    Par défaut NameError: global name 'thread' is not defined
    Bonjour,
    Je souhaite faire fonctionner un thread;
    voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def thread():
        #tout plein d'instructions ici
     
    # Je défini et démarre mon thread
    t=threading.Thread(group=None, target=thread, name=None, args=(), kwargs={})
    t.start()
    L'erreur suivante est retournée pour la ligne où le thread t est défini:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NameError: Global name 'thread' is not defined
    Je ne sais pas trop comment interpréter cette erreur, mon thread est bien défini, la fonction qui lui donne ses instructions aussi. (Je précise que je débute en Python). je sais pas non plus si l'erreur peut venir de mon code (qui me semble correct) ou d'une faute ailleurs dans le programme?
    Merci pour votre aide!
    ZORRO
    Plus Vengeur que Masqué

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Le code 'simple' suivant ressemble au votre mais ne reproduit pas le problème énoncé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    import threading
    def thread():
        pass
     
    t = threading.Thread(target=thread)
    t.start()
    print 'hello'
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre actif Avatar de Balbuzard
    Profil pro
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Points : 263
    Points
    263
    Par défaut
    Non, exactement le même code (mêmes instructions, mêmes instanciations des threads) dans mon projet continue de générer l'erreur. Tous les def sont pourtant dans une même classe, il devrait les reconnaitre. J'ai même tenté d'ajouter un global thread avant de créer et d'instancir mon thread, mais sans résultat.
    Par contre, dans un projet à part, exécuté avec le même interpreteur, ce code tout seul ne la génère pas.
    Je suis en train de modifier une classe d'une librairie standard (j'ai créé une classe qui étend celle dont je veux ajouter des nouvelles options).
    Je sais pas si c'est à cause de ça que python ne veut pas de thread, peut-être il y a une interdiction pour certaines opérations concernant certains types de fichiers? (bon, je comprends vraiment pas, j'essaie de trouver une explication, vu que le problème ne semble pas venir du code).
    Merci pour votre aide!

    EDIT:
    J'ai pensé m'en sortir en créant une classe à part qui étend threading.Thread.
    Je souhaite passer un argument au thread que je lance (une instruction bash à réaliser). Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class threadSecondaire(threading.Thread):
        def __init__(self):
            threading.Thread.__init__(self)
            print command
        def run(self)
            print 'hello'
            os.system(self.command)
    Bon, j'ai donc réussi à contourner le problème, mais j'aimerais tout de même comprendre pourquoi dans le premier cas, en me servant du code que vous m'avez indiqué, ça ne fonctionne pas. Merci beaucoup pour votre aide!
    ZORRO
    Plus Vengeur que Masqué

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Sans reproducteur, restent les conjectures.
    Je ne me sens pas assez 'bon' en Python pour me lancer dans ce genre d'exercice.
    Mais peut être que d'autres auront de bonnes idées.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre actif Avatar de Balbuzard
    Profil pro
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Points : 263
    Points
    263
    Par défaut
    Oui, c'est sûr :-S
    Tant pis, au moins j'aurais trouvé une methode qui marche, à défaut de comprendre pourquoi la première ne fonctionne pas dans ce cas particulier.
    Merci pour votre aide!
    ZORRO
    Plus Vengeur que Masqué

  6. #6
    Membre éprouvé
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Points : 1 066
    Points
    1 066
    Par défaut
    Aurais-tu des imports circulaires dans ton projet ?

  7. #7
    Membre actif Avatar de Balbuzard
    Profil pro
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Points : 263
    Points
    263
    Par défaut
    Merci de ta réponse;
    Non, je n'ai pas d'import circulaires, tant pis, je peux pas rester d'avantage sur ce problème. Dommage, j'aurais aimé creuser un peu plus. Pas évident de commencer sur un nouveau langage et de devoir présenter les premiers résultats quelques jours après :-S
    Merci pour ton aide ;-)
    ZORRO
    Plus Vengeur que Masqué

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/06/2009, 15h23
  2. références croisées objets NameError: global name is not defined
    Par loicmidy dans le forum Général Python
    Réponses: 2
    Dernier message: 13/06/2009, 15h41
  3. NameError: name 'nbBug' is not defined
    Par titi_lion dans le forum Général Python
    Réponses: 1
    Dernier message: 15/05/2009, 12h32
  4. NameError: global name 'entr2' is not defined
    Par noquioz dans le forum Tkinter
    Réponses: 18
    Dernier message: 24/11/2008, 11h20
  5. NameError: name 'excel' is not defined
    Par billyrose dans le forum Général Python
    Réponses: 3
    Dernier message: 14/07/2008, 17h37

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