comment killer un thread en python? - Python - Programmation
Marsh Posté le 20-10-2003 à 17:58:26
Chriss a écrit : En Java lorsque l'on cree un thread on peut le killer simplement a partir du processus pere. |
sauf que c'est déprécié depuis perpette.
tu étends Thread, et tu rajoutes ta fonction pour quitter, ce qui permet d'assurer un état cohérent.
Marsh Posté le 21-10-2003 à 09:43:25
Tu parles d'une fonction interne a mon thread?
Elle ressemble a quoi cette fonction pour quitter?
Marsh Posté le 21-10-2003 à 09:47:20
ca depends de ce a quoi ressemble ton thread
exemple :
Code :
|
Marsh Posté le 21-10-2003 à 11:50:26
lorill a écrit : ca depends de ce a quoi ressemble ton thread
|
Ouep !
Faut aussi penser a stocker ces objets Threads quelque part.
Enfin moi c'est comme ca que je fais
Marsh Posté le 22-10-2003 à 10:13:08
Je pense que ton thread reste present quand tu fait comme ca.
sa boucle est arrete mais il continue a etre la.
J'ai trouvé une bonne solution a cette adresse:
http://aspn.activestate.com/ASPN/C [...] cipe/65222
De cette facon je kill proprement mes threads
Marsh Posté le 23-10-2003 à 12:42:21
Chriss a écrit : Je pense que ton thread reste present quand tu fait comme ca. |
Je pense pas...
Puisqu'il quitte la methode run()
Marsh Posté le 18-12-2003 à 23:29:26
Salut,
Je rallume ce topic car je bute précisément sur ce problème.
J'ai une thread qui tourne en while 1 donc je ne peux pas déclencher d'action à partir d'elle, il faudrait que je la kill de la thread principale et je vois pas trop comment m'y prendre.
merci d'avance
Marsh Posté le 18-12-2003 à 23:34:24
toutes façons c'est chiant de pas pouvoir tuer, si ton bordel est bloqué (attente de ressource : E/S, verrou, etc), t'es bien dans la merde
pthread_cancel
Marsh Posté le 18-12-2003 à 23:40:15
En effet c'est chiant qu'il n'y ait pas de moyen simple pour faire ça.
Marsh Posté le 18-12-2003 à 23:53:12
moi aussi je trouve ça dommage. quand on voit l'intelligence des pthread notemment avec la gestion des points d'interruption, les routines de nettoyage, c'est une véritable régression.
Marsh Posté le 19-12-2003 à 00:02:41
Mais mon problème est vraiment bizarre. Le fait que je ne puisse pas killer cette thread fait que à la destruction de l'objet dans lequel est crée la thread, mon __del__ ne se lance pas. Ca marche très bien si je ne lance pas la thread.
Marsh Posté le 19-12-2003 à 00:12:36
Sans compter que l'interpréteur CPython (je ne sais pas pour Jython) a un "global lock", c'est à dire que 2 threads python ne s'exécutent pas vraiment concurremment, même sur machine multi-CPU. (Sauf lors des appels à des fonctions natives non interprétées si le mutex est lâché)
Marsh Posté le 19-12-2003 à 00:12:40
J'ai reproduit le problème ici :
Code :
|
le destructeur ne s'execute pas.
Marsh Posté le 19-12-2003 à 00:15:44
1) utilise threading
2) c'est normal, del n'appelle __del__ que si il n'y a plus de référence. or ici, le thread référence ton Prout via self.fonc
Marsh Posté le 19-12-2003 à 00:19:56
1) je vais voir ça
2) yep je suspectais cette finesse.
3) bon c'est chiant, faut que je trouve une feinte...
Marsh Posté le 19-12-2003 à 10:32:26
Perso je trouve que c'est plus propre de passer par un héritage Thread, mais bon...
Sinon Taz a raison pour le problème de référence.
Une soluce possible :
Code :
|
le time.sleep(2) est la pour compenser le time.sleep(1) dans fonc() qui empeche le thread de se terminer avant l'appel a del
Marsh Posté le 19-12-2003 à 14:47:12
Bah si, c'est pour illustrer que l'appel a del est pris en compte lorsque le thread est sorti de sa boucle...
Marsh Posté le 19-12-2003 à 18:16:25
e_esprit a écrit : Bah si, c'est pour illustrer que l'appel a del est pris en compte lorsque le thread est sorti de sa boucle... |
bah quand l'interprétyeur termine, il détruit le thread
Marsh Posté le 20-12-2003 à 23:13:26
Je parle pas de la destruction effective du thread mais de l'appel a __del__
Marsh Posté le 20-12-2003 à 23:16:06
et quoi ?
lis la documentation du gc, vois le fonctionnement de del
Marsh Posté le 21-12-2003 à 12:10:41
je crois que t'as pas bien compris ce que je disais...
L'exemple fourni illustre ce que tu disais :
Citation : 1) utilise threading |
Alors faut pas s'ennerver, hein... reste zen !
Marsh Posté le 21-12-2003 à 15:43:07
garbage |
Marsh Posté le 20-10-2003 à 17:54:25
En Java lorsque l'on cree un thread on peut le killer simplement a partir du processus pere.
Par contre en python j'ai l'impression que ce n'est pas possible.
Dans http://www.python.org/doc/current/ [...] jects.html, pas la moindre fonction du style killThread.
Comment faire pour m'en sortir?
merci de vos conseils.