2010-05-12 13 views
6

J'ai un thread qui est exécuté lorsqu'une action se produit. Étant donné la logique du programme, le thread ne peut pas être démarré tant qu'une autre instance est en cours d'exécution. Pourtant, quand je l'appelle une seconde fois, j'obtiens une erreur "RuntimeError: thread déjà démarré". J'ai ajouté une vérification pour voir si elle est réellement vivante en utilisant la fonction Thread.is_alive(), et elle est réellement morte.Le thread terminé par Python ne peut pas redémarrer

Qu'est-ce que je fais mal?

Je peux fournir plus de détails si nécessaire.

Répondre

11

Les threads ne peuvent pas être redémarrés. Vous devez recréer le Thread pour le redémarrer.

2

Vous pouvez essayer de régler

thread._Thread__started = False 

Il est pas officiellement documenté, afin de l'utiliser à vos propres risques! :)

+0

J'utilise déjà _Thread__stop() pour le démarrer ... L'ajout d'un ne semble pas si mal, mais rend mon programme vraiment hacky ... – bfrguci

6

De la documentation Python: start() démarre l'activité du thread. Ceci doit être appelé au plus une fois par objet de thread. Il fait en sorte que la méthode run() de l'objet soit invoquée dans un fil de contrôle distinct.

Si vous dérivez une classe à partir de threading.Thread, vous pouvez ajouter un Thread.__init__(self) à la fin de votre méthode d'exécution et vous serez en mesure d'appeler redémarrer et il se réinitialisera automatiquement une fois terminé.