在退出之前,有没有办法获取所有活动threading.Timer
对象的列表以便cancel
所有对象?否则程序会挂起以等待完成。
我可以保留它们的清单,但是当它们开火时我也必须将它们移除。相反,我想知道是否有办法获得所有这些。
答案 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()