Retourner aux forums || Retourner au forum Programmation.python
Programmation.python : Detecter la fin d'un Thread
Posté par Toto () le 01 février 2008Je 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
> Lire le message (2 commentaires, moyenne: 1,5).
RE: Detecter la fin d'un Thread
http://docs.python.org/lib/event-objects.html
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
Revenir en haut de page || Retourner aux forums || Retourner au forum Programmation.python



Cette discussion est archivée, il n'est plus possible de laisser des commentaires.
Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.