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 :

Thread et raw_input()


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    863
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 863
    Par défaut Thread et raw_input()
    Bonjour,

    J'essaie de gérer des threads (je commence avec un seul)... cela fonctionne, mais raw_input() n'est plus pris en compte:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    #!/usr/bin/python
     
    # thread management
    import threading,Queue
    from time import *
     
    # Management of thread: thread can be stopped quickly
    #http://python.developpez.com/faq/?page=Thread#ThreadKill
    class myThread(threading.Thread):
        def __init__(self, name=None, addressList=["78"]):
          threading.Thread.__init__(self, target=self.run, name=name )
          self.name=name
          self._stopevent = threading.Event( )
          self.addressList = addressList
          self.start()
          #self.addressList = addressList
        def run(self):
          while not self._stopevent.isSet():
            print "name : ", self.name
            self._stopevent.wait(1.0)
        def stop(self):
          self._stopevent.set( )
     
    class access:  
      def __init__(self, toto):
        self.doc = toto
      def start(self):
        self.nodequeue={}
        self.nodethread={}
        self.nodequeue["essai"]= Queue.Queue(0)
        self.nodethread["essai"]= myThread("FORTHREAD1")
        #for key in self.nodethread.keys():
        #  self.nodethread[key].stop()
      def stop(self):
        # 1) delete all queues
        for item in self.nodequeue:
          del item
        self.nodequeue.clear()
        # 2) delete all thread
        for key in self.nodethread.keys():
          self.nodethread[key].stop()
          print
        self.nodethread.clear()
      def stopOneNode(self, name):
        del self.nodequeue[name]
        self.nodethread[name].stop()
        del self.nodethread[name]
     
    if __name__ == "__main__":
      a = access('F:\\octopussy\\input\\access.xml')
      a.start()
      """sleep(5.0)
      a.stopOneNode("com2")"""
     
      a.nodequeue["FORTHREAD1"].put("stop")
     
      #menu = ihm.getchar()
      menu = raw_input("entrer touche : ")
      while menu != "e":
        print "attente"
        if menu == "s":
          a.stop()
        menu = raw_input("entrer touche : ")
        #menu = ihm.getchar()
     
      """sleep(5.0)
      a.stop()"""
    Pourquoi ?

  2. #2
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Par défaut
    par pur supposition :

    la console est surement "bindé" au thread principal donc un raw_input appellé hors de ce thread par un peu dans le vent ...

  3. #3
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    863
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 863
    Par défaut
    Quelle solution adopter ?

    Existe-t-il des tutoriels à ce sujet. J'entends sur la gestion de la console via le thread principal, pas sur les threads seuls.

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    En exécutant ton programme, je reçois:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Traceback (most recent call last):
      File "C:\Prog\python\test.py", line 53, in <module>
        a.nodequeue["FORTHREAD1"].put("stop")
    KeyError: 'FORTHREAD1'
    Donc le thread principal se plante, et n'arrive pas jusqu'au raw_input.
    En remplaçant "FORTHREAD1" par "essai", le raw_input fonctionne...

  5. #5
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    863
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 863
    Par défaut
    OK merci

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

Discussions similaires

  1. Tri multi-threadé
    Par Tifauv' dans le forum C
    Réponses: 8
    Dernier message: 28/06/2007, 09h00
  2. récupérer la valeur de sortie d'un thread
    Par jakouz dans le forum Langage
    Réponses: 3
    Dernier message: 31/07/2002, 11h28
  3. Programmer des threads
    Par haypo dans le forum C
    Réponses: 6
    Dernier message: 02/07/2002, 13h53
  4. Réponses: 5
    Dernier message: 12/06/2002, 15h12
  5. [Kylix] Pb de Thread !!
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 25/04/2002, 13h53

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