获取对线程的引用我忘了保留引用

时间:2015-11-13 20:36:46

标签: python python-2.7

在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()的引用?或者是阻止它从一开始就引用它的唯一方法是什么?

我知道这是非常糟糕的做法,但它证明了我更普遍的问题。

1 个答案:

答案 0 :(得分:0)

TimerThread个子类,与所有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;不是板球那个。