Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 列出所有活动的多线程计时器对象_Python_Multithreading_Timer - Fatal编程技术网

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()。加上答案,我就可以投你一票了。