Python 列出所有活动的多线程计时器对象
是否有办法获取所有活动对象的列表,以便在退出之前将其全部删除?否则程序将挂起以等待其完成Python 列出所有活动的多线程计时器对象,python,multithreading,timer,Python,Multithreading,Timer,是否有办法获取所有活动对象的列表,以便在退出之前将其全部删除?否则程序将挂起以等待其完成 我可以保留它们的列表,但当它们开火时,我也必须移除它们。相反,我想知道是否有办法获得所有计时器。如果您在退出程序时只需要取消计时器,您可以为计时器设置守护进程标志,它们将在退出时被杀死,而不是等待完成: from threading import Timer timer = Timer(10, fn) timer.setDaemon(True) timer.start() threading.enumer
我可以保留它们的列表,但当它们开火时,我也必须移除它们。相反,我想知道是否有办法获得所有计时器。如果您在退出程序时只需要取消计时器,您可以为计时器设置
守护进程
标志,它们将在退出时被杀死,而不是等待完成:
from threading import Timer
timer = Timer(10, fn)
timer.setDaemon(True)
timer.start()
threading.enumerate()
返回一个列表,其中包含活动的计时器-它们是线程的实例。\u 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
>>>
不,没有自动全局列表。您应该注册您的计时器,也许您可以将它们添加到
weakref.WeakSet
。退出时,调用cancel()
并捕获任何异常。似乎是合法的,你为什么不把它转换成一个答案,这样我就可以接受它呢?它们不会出现在threading.enumerate()。加上答案,我就可以投你一票了。