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?
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.
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)
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?
Si vous voulez forcer arrêter votre thread: thread._Thread_stop()
Pour moi, fonctionne très bien.