Tuer un thread en Python

Le
Salvatore
Bonjour la communauté,

Pour ce que cela intéresse, voici une recette permettant de tuer
les threads enfants avec Python

http://sebulba.wikispaces.com/recipe+thread2



Dans l'environnement Windows, c'est particulièrement utile :-)
Dans un de mes projet, je lance plusieurs threads, et bien
que les tâches soit accomplies, Windows met très longtemps sur chacune
de tâches avant de me rendre la main.

Cordialement

Salvatore
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
MC
Le #647337
Salut !

Je ne connais pas assez le fonctionnement interne de Python, pour bien
comprendre le code.

Mais, ça me semble très intéressant. On devrait, avec ça, gérer plus
efficacement les pools de threads.

Sinon, je n'ai pas tes problèmes, "Dans l'environnement Windows".
Lorsque mes threads se terminent, ça (Python) répond de suite.








--
@-salutations

Michel Claveau
Salvatore
Le #647336
Bonjour,

En fait, sous Windows il n'y pas de gestions de signaux
pouvant être transmis à un thread pour y mettre fin éventuellement.
Et Python ne dispose pas en standard de moyen de tuer un thread
comme il est possible de le réaliser en Java.

Mon problème actuellement, est que je dois reconnecter un nom
important de boite aux lettres dans deux domaines différents.
A chaque raccordement, la réponse me parvient aux bout de 15minutes et
encore, pourtant la BAL est raccordée, c'est pour cela que je préfère
tuer le thread enfant plutot que de l'attendre.

Ceci dit je ne fais pas la fine bouche avec Windows :-)
Quotidiennement, je découvre de nouvelles fonctionalités.
Dernière en date , wmi en mode ligne de commande : wmic
qui révèle des possibilités insoupçonnées.
http://support.microsoft.com/servicedesks/webcasts/wc072402/listofsampleusage.asp?SD=gn&LN=cs&gssnb=1

PS : Voici un script permettant de gérer des pools de Threads
http://www.chrisarndt.de/en/software/python/threadpool/

Cordialement

Salvatore



Salut !

Je ne connais pas assez le fonctionnement interne de Python, pour bien
comprendre le code.

Mais, ça me semble très intéressant. On devrait, avec ça, gérer plus
efficacement les pools de threads.

Sinon, je n'ai pas tes problèmes, "Dans l'environnement Windows".
Lorsque mes threads se terminent, ça (Python) répond de suite.










Salvatore
Le #647127
Ceci dit je ne fais pas la fine bouche avec Windows :-)
Quotidiennement, je découvre de nouvelles fonctionalités.
Dernière en date , wmi en mode ligne de commande : wmic
qui révèle des possibilités insoupçonnées.
http://support.microsoft.com/servicedesks/webcasts/wc072402/listofsampleusage.asp?SD=gn&LN=cs&gssnb=1


Pour appater le chalant :-)

C:>WMIC PROCESS GET name, processid, CommandLine /every:1

Méta-MCI \(MVP\)
Le #647124
Bonsoir !


Si tu veux jouer avec WMI et les processus, le script suivant t'amusera certainement :


import win32com.client
wmihandle = win32com.client.GetObject('winmgmts:')
process_list = wmihandle.ExecQuery('Select * from Win32_Process')
for p in process_list:
detail=p.GetObjectText_().split('n')
for ligne in detail:
if ligne[0:1]!='{' and ligne[0:1]!='}':
l=ligne.split('=')
if len(l)>=2:
item=l[0][1:-1]
valeur=l[1][2:-2]
print item,"=",valeur
print '-'*66



Pour WMIC, je l'utilise quotidiennement, dans des batchs sur serveurs.

Si tu souhaites t'amuser avec WMI en ligne de commande, regarde PowerShell. Il permet, notamment, de
naviguer dans WMI, en visualisant toutes les collections (listes d'attributs/propriétés)

Et, pour trouver quelques trucs, à partir du bureau, appuie sur [F1], et, lorsque l'aide sera
chargée, cherche avec ces phrases :
Nouveaux outils de ligne de commande
Références de A à Z de la ligne de commande
Vue d'ensemble de l'interpréteur de commandes

A noter que certaines commandes, à l'instar de WMIC, Netsh, Net, etc. sont gigantesques d'options
et de possibilités.



Enfin, dernier point, WMI n'est que l'implémentation windows de WBEM (Web-Based Enterprise
Management) provenant de DMTF (Distributed Management Task Force), qui existe aussi dans linux, bsd,
etc.



@-salutations

Michel Claveau



PS : la ligne de commande du lancement d'un processus ne peut pas être obtenu de cette façon (WMI)
pour windows-2000 (et avant) ; cela n'est implémenté qu'à partir d'XP.
Salvatore
Le #647122
Merci Michel :-)


Bonsoir !


Si tu veux jouer avec WMI et les processus, le script suivant t'amusera
certainement :


import win32com.client
wmihandle = win32com.client.GetObject('winmgmts:')
process_list = wmihandle.ExecQuery('Select * from Win32_Process')
for p in process_list:
detail=p.GetObjectText_().split('n')
for ligne in detail:
if ligne[0:1]!='{' and ligne[0:1]!='}':
l=ligne.split('=')
if len(l)>=2:
item=l[0][1:-1]
valeur=l[1][2:-2]
print item,"=",valeur
print '-'*66








jean-michel bain-cornu
Le #646916
Bonjour,
A noter que certaines commandes, à l'instar de WMIC, Netsh, Net, etc.
sont gigantesques d'options et de possibilités.
Perso, je préférerais une commande ps, dispo en natif dans le système de

base, tout simplement.
Je me rappelle avoir perdu beaucoup de temps avec WMI, simplement pour
avoir une liste de process (la haine). Par exemple, ça ne marche pas, ou
pas bien, lorsque le programe s'exécute dans un service. Je dis pas bien
parce que ça ne marche pas sur mon pc de dèv, mais je ne suis pas sûr
que ça ne marcherait pas si j'installais une verrue x ou y dans l'os, ce
que je ne souhaite pas faire.

Enfin, dernier point, WMI n'est que l'implémentation windows de WBEM
(Web-Based Enterprise Management) provenant de DMTF (Distributed
Management Task Force), qui existe aussi dans linux, bsd, etc.
A noter que WMI ne marche pas dans virtualbox (quid de vmware ?), ce qui

pose problème (ça rend une erreur du style 'service not found') à ceux
qui utilisent cet environnement.

Si quelqu'un a une solution pour ces deux problèmes (autre chose que
porter sous linux, je sais, ça marche, merci), je suis preneur.

A+
jm

PS : xp sp3, python 2.4.4

Méta-MCI \(MVP\)
Le #646914
Bonjour !


Perso, je préférerais une commande ps, dispo en natif dans le système de base, tout simplement.


WMIC est une commande (utilisable en invite de commande) dispo dans les windows standards (sauf,
peut-être, Vista-basic)

Sinon, en standard (sans rien ajouter), tu as aussi, dans windows XP/2003/Vista, les commandes
TASKLIST et TASKKILL.
Faire Tasklist /? pour voir l'aide.


virtualbox (quid de vmware ?)


Pour les machines virtuelles, désolé, je commence seulement à utiliser Virtual-PC-2007 et
Virtual-Servers ; je n'ai pas vraiment d'expériences avec les outils alternatifs.
Dans Virtual-PC, cela dépend de l'OS virtuel lancé. Mais, WMI, comme Tasklist, ont l'air de
fonctionner chez moi (sur un XP-pro virtuel, au-dessus d'un Vista intégral). Le script Python que
j'ai montré tantôt fonctionne aussi.


@-salutations

Michel Claveau

jean-michel bain-cornu
Le #668067
Perso, je préférerais une commande ps, dispo en natif dans le système
de base, tout simplement.


WMIC est une commande (utilisable en invite de commande) dispo dans les
windows standards (sauf, peut-être, Vista-basic)

Sinon, en standard (sans rien ajouter), tu as aussi, dans windows
XP/2003/Vista, les commandes TASKLIST et TASKKILL.
Faire Tasklist /? pour voir l'aide.


Et non, je n'ai pas tout ça moi, et mon xp est tout ce qu'il y a de plus
standard.
Mais bon, ce n'est pas bien grave, ça fait juste un module pas
indispensable de mon soft qui ne fonctionne pas, on va pas en faire un plat.
C'est juste un peu agaçant, koa.

A+
jm

PS : quitte à installer qlqchose, j'aime autant utiliser cygwin ;-)


Publicité
Poster une réponse
Anonyme