Retourner aux forums || Retourner au forum Programmation.python

Programmation.python : Detecter la fin d'un Thread

Posté par Toto () le 01 février 2008
0
Bonjour,

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

> Lire le message (2 commentaires, moyenne: 1,5).  

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.

RE: Detecter la fin d'un Thread

Posté par fabrizio duhem (page perso, ) le 02/02/2008 à 13:00. (lien). Évalué à 2.

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

    Posté par Toto () le 02/02/2008 à 21:01. (lien). Évalué à 1.

    Merci bien je ne voyais pas trop comment utiliser cet objet Event.
    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..

Revenir en haut de page || Retourner aux forums || Retourner au forum Programmation.python