如何在Python中检查Threading.Timer对象是否正在运行

8

假设我定义了一个计时器:

def printer(data):
    print data
data= "hello"
timer_obj = Timer(5,printer,args=[data])
timer_obj.start()
# some code
if( #someway to check timer object is currently ticking):
    #do something

那么,如果计时器对象正在活动中,我指的是不在函数阶段而是在等待阶段,是否有方法可以实现?

提前感谢。

2个回答

10

threading.Timer是threading.Thread的子类,您可以使用is_alive()方法来检查计时器当前是否正在运行。

import threading
import time

def hello():
    print 'hello'

t = threading.Timer(4, hello)
t.start()
t.is_alive() #return true
time.sleep(5) #sleep for 5 sec
t.is_alive() #return false

1

@DXM的回答在计时器到期后确实有效。但是,如果取消计时器,在调用is_alive时仍会返回True

也许这是Python 3的一个回归或意图的副作用。

无论如何,最可靠的方法是使用Timer.finished属性:

import threading
import time

def hello():
    print('hello')

t = threading.Timer(4, hello)
t.start()
print(t.finished.is_set())  # prints False
print(t.is_alive())         # prints True
time.sleep(5)               # sleeps for 5 sec
print(t.finished.is_set())  # prints True
print(t.is_alive())         # prints False

t = threading.Timer(4, hello)
t.start()
print(t.finished.is_set())  # prints False
print(t.is_alive())         # prints True
t.cancel()                  # cancel timer
print(t.finished.is_set())  # prints True
print(t.is_alive())         # prints True

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接