2011-07-22 12 views
1

Question: pourquoi mon DAL ne fonctionne-t-il pas sur son propre thread?Le thread Python ne se sépare pas du thread parrent


J'ai ce programme sur lequel j'ai travaillé sur lequel j'ai implémenté un gestionnaire de fichiers simple. C'est loin de ma première expérience de travail avec des threads, mais pour une raison quelconque, je ne peux pas faire fonctionner celui-ci. J'instancier mon DAL ici:

self.DAL = DAL(path) 
    ##prepare the reactor 
    self.DALrec = threading.Thread(target=self.DAL.reactor,name='DALReactor') 
    self.DALrec.run() 

Le réacteur a cela il:

def reactor(self): 
     while not self.kill: 
      ##check for new entries: 
      for i in self.ins: 
       self.save(i) 

      ##wait a minute before checking again. 
      time.sleep(60) 

pas compliqué. J'instancie le DAL qui tombe en panne et instancie un thread, comme je l'ai toujours fait. Mais pour une raison quelconque, je reçois un comportement vraiment bazar à partir de cela. Au lieu d'appeler 'run' et le thread principal continuant à laisser le thread à sa propre entreprise, il traite 'run' comme si j'appelais self.DAL.reactor() depuis le thread principal. Dans mon débogueur (winpdb, qui a fonctionné sur ma version précédente de ce programme), je devrais voir un nouveau thread en cours de création, mais il ne reste qu'un seul thread.

Quelqu'un at-il une idée de la raison pour laquelle je n'ai qu'un seul thread ici au lieu de deux? Merci.

Répondre

4

Vous devez appeler start pour exécuter la méthode run dans un thread distinct. Sinon, run est appelée comme toute autre méthode.

De docs: Une fois qu'un objet thread est créé, son activité doit être démarrée en appelant la méthode start() du thread. Cela appelle la méthode run() dans un thread séparé de contrôle.

+0

oh blast. Je me souviens pas. laisse-moi essayer ça vite. – Narcolapser

+0

qui l'a fait. Merci. – Narcolapser

+0

Content de pouvoir aider :) – MByD

Questions connexes