在Python中,如果我在这个帖子中做了类似答案的事情:Executing periodic actions in Python
例如:
>>>import time, threading
>>> def foo():
... print(time.ctime())
... threading.Timer(10, foo).start()
...
>>> foo()
据我所知,每10
秒我都会开始一个等待时间的新Timer
线程,然后创建一个新的计时器等,它会无限期地运行。
显然,dir()
的输出中没有任何内容,因为我没有给它命名。
有没有办法获得对此Timer
的引用,例如对.cancel()
的引用?或者是阻止它从一开始就引用它的唯一方法是什么?
我知道这是非常糟糕的做法,但它证明了我更普遍的问题。
答案 0 :(得分:0)
Timer
是Thread
个子类,与所有Thread
一样,它们显示在枚举中。您不一定知道哪个是 计时器,但您可以获得threading.enumerate()
所有正在运行的线程的列表。
如果您只是想取消所有未完成的Timer
,您可以这样做:
for thread in threading.enumerate():
if isinstance(thread, threading._Timer): # In Py2.7 at least, Timer is a function wrapping the class _Timer
thread.cancel()
显然,如果你的代码只是众多中的一个库,那么这将是不合时宜的,因为它会取消在其他地方产生的Timer
;不是板球那个。