Je ne vois pas de méthode "propre" pour détecter la fin d'un Thread. Voici mon problème :
Soit une classe Server qui contient un tableau d'objet client, chacun de ces clients étant un thread. J'ai donc un truc de ce genre la :
class Server:
....def test:
........while True:
............while len(self.aClients) < 10:
................cl = Client()
................self.aClients.append(cl)
................cl.start()
Maintenant, mon objet Client se termine quand il a fini. Comment faire pour qu'il s'enleve du tableau aClients ?
Je pense à plusieurs solutions, mais je sais pas trop si elles sont dans l'esprit du Python, ou s'il y a plus propre :
- passer le tableau a mon Client pour qu'il s'y enleve tout seul (vive les mutex ;))
- faire une fonction dans un thread à part qui vérifie l'état des thread et s'endort pour une durée indéterminé (mon but étant plus le garbage collecting)
Avez vous d'autres idées / conseils ?
Merci
# RE: Detecter la fin d'un Thread
Posté par fabrizio duhem (site web personnel) . Évalué à 2.
un exemple de code ça parle plus :-)
import threading
import time
class Client(threading.Thread):
....def __init__(self, event):
........threading.Thread.__init__(self)
........self.event = event
....def run(self):
........print "test"
........time.sleep(1)
........print "finished"
........self.event.set()
class Server(threading.Thread):
....def __init__(self):
........threading.Thread.__init__(self)
........self.clients = []
....def run(self):
........print "server started"
........for i in range(0,10):
............e = threading.Event()
............c = Client(e)
............self.clients.append(c)
............c.start()
........while 1:
............terminatedClient = []
............if len(self.clients) == 0:
................return
............for x in self.clients:
................if x.event.isSet():
....................terminatedClient.append(x)
............for x in terminatedClient:
................self.clients.remove(x)
if __name__ == "__main__":
....server = Server()
....server.start()
[^] # Re: RE: Detecter la fin d'un Thread
Posté par Toto . Évalué à 1.
Dommage par contre qu'on ne puisse pas faire de wait() sur un tableau d'event pour eviter d'avoir à utiliser un time.sleep() lors du parcours de nos events..
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.