【发布时间】:2012-06-18 12:55:14
【问题描述】:
我注意到以下代码中的以下行为(使用 threading.Timer 类):
import threading
def ontimer():
print threading.current_thread()
def main():
timer = threading.Timer(2, ontimer)
timer.start()
print threading.current_thread()
timer.cancel()
if timer.isAlive():
print "Timer is still alive"
if timer.finished:
print "Timer is finished"
if __name__ == "__main__":
main()
代码的输出是:
<_MainThread(MainThread, started 5836)>
Timer is still alive
Timer is finished
我们从输出中注意到,计时器对象仍然处于活动状态并同时完成。
其实我想调用一个类似的函数数百次,我想知道那些“活”的计时器是否会影响性能。
我想以适当的方式停止或取消计时器对象。我做得对吗?
谢谢
【问题讨论】:
-
将
timer.finished替换为timer.finished.is_set()。timer.finished属性不是布尔值,它是_Event对象,因此检查if timer.finished会产生误导(因为它总是会计算为 True) -
有时会被认为是“不活着”,尝试在“timer.cancel()”之后添加睡眠1或2秒,它会正常工作。
标签: python multithreading