Liste tous les objets multithreading actifs.

Est-il possible d'obtenir une liste de tous les threads actifs. Timer objets pour annuler tous avant de quitter? Sinon, le programme se bloque pour attendre leur achèvement.

Je pourrais en garder une liste, mais je dois aussi les retirer quand ils tirent. Au lieu de cela, je voulais savoir s'il y avait un moyen de les obtenir tous.

0
@KlausD. semble légitime, pourquoi ne pas le convertir en une réponse pour que je puisse l'accepter?
ajouté l'auteur enrico.bacis, source
@wwii: Ils le font vraiment, gentil. Ajoute la réponse pour que je puisse t'avoir.
ajouté l'auteur enrico.bacis, source
Ils n'apparaissent pas dans le threading.enumerate() résultat?
ajouté l'auteur wwii, source
Non, il n'y a pas de liste globale automatique. Vous devriez enregistrer vos Timers, peut-être les ajouter à un weakref.WeakSet . En quittant, appelez cancel() et attrapez n'importe quelle exception.
ajouté l'auteur Klaus D., source

2 Réponses

Si vous avez juste besoin d'annuler les minuteurs en quittant le programme, vous pouvez définir l'indicateur daemon pour les minuteurs et ils seront tués à la sortie au lieu d'attendre leur fin:

from threading import Timer
timer = Timer(10, fn)
timer.setDaemon(True)
timer.start()
0
ajouté

threading.enumerate() returns a list that will include Timers that are Alive - they are instances of threading._Timer.

>>> t = threading.Timer(30, foo, kwargs = d)
>>> t.start()
>>> t.isAlive()
True
>>> for thing in threading.enumerate():
    if isinstance(thing, threading._Timer):
        thing.cancel()


>>> t.isAlive()
False
>>> 
0
ajouté