web-dev-qa-db-fra.com

Comment fermer un fil de l'intérieur?

Pour chaque client se connectant à mon serveur, je crée un nouveau thread, comme ceci:

# Create a new client
c = Client(self.server.accept(), globQueue[globQueueIndex], globQueueIndex, serverQueue )

# Start it
c.start()

# And thread it
self.threads.append(c)

Maintenant, je sais que je peux fermer tous les discussions en utilisant ce code:

    # Loop through all the threads and close (join) them
    for c in self.threads:
        c.join()

Mais comment puis-je fermer le fil de dans ce fil?

39
skerit

Lorsque vous démarrez un fil, il commence à exécuter une fonction que vous lui donnez (si vous étendez threading.Thread, la fonction sera run()). Pour terminer le fil, il suffit de revenir de cette fonction.

Selon this , vous pouvez également appeler thread.exit(), ce qui lancera une exception qui mettra fin au thread en silence.

48
Brendan Long

Un peu tard, mais j'utilise une variable _is_running pour indiquer au thread quand je veux fermer. C'est facile à utiliser, implémentez simplement un stop () dans votre classe de thread.

def stop(self):
  self._is_running = False

Et dans run() il suffit de boucler sur while(self._is_running)

13
Eric Fossum

Que diriez-vous de sys.exit() du module sys

Si sys.exit() est exécuté à partir d'un thread, il ne fermera que ce thread.

Cette réponse parle ici de cela: Pourquoi sys.exit () ne se ferme-t-il pas lorsqu'il est appelé dans un thread en Python?

6
kryptokinght

Si vous voulez forcer arrêter votre thread: thread._Thread_stop() Pour moi, fonctionne très bien.

1
iFA88