列出所有活动的多线程.Timer对象

时间:2015-06-18 15:04:21

标签: python multithreading timer

在退出之前,有没有办法获取所有活动threading.Timer对象的列表以便cancel所有对象?否则程序会挂起以等待完成。

我可以保留它们的清单,但是当它们开火时我也必须将它们移除。相反,我想知道是否有办法获得所有这些。

2 个答案:

答案 0 :(得分:2)

threading.enumerate()会返回一个列表,其中包含 Alive 的计时器 - 它们是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
>>> 

答案 1 :(得分:1)

如果你只需要在退出程序时取消计时器,你可以为计时器设置daemon标志,它们将在退出时被杀死,而不是等待它们完成:

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