from threading import Timer
import time
import logging
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
datefmt='%a, %d %b %Y %H:%M:%S',
)
global t #globaljj
class demo_timer:
def __init__(self):
self.__t = None
def demo_print(self):
logging.info("hello")
def demo_start(self):
if self.__t is not None:
self.__t.cancel()
logging.info("timer cancel %s",self.__t)
self.__t = None
self.__t = Timer(5,self.demo_print)
logging.info("timer %s",self.__t)
self.__t.start()
a = demo_timer()
t = Timer(5,a.demo_print)
while True:
time.sleep(0.1)
a.demo_start()
结果:
Thu,29 Jun 2017 08:55:59 time_test.py [line:23] INFO计时器< _Timer(Thread-1061,initial)> 2017年6月29日星期四08:55:59 time_test.py [line:20] INFO计时器取消< _Timer(Thread-1061,15192开始)> 2017年6月29日星期四08:55:59 time_test.py [line:23] INFO计时器< _Timer(Thread-1062,initial)> 2017年6月29日星期四08:55:59 time_test.py [line:20] INFO计时器取消< _Timer(Thread-1062,16088开始)> 2017年6月29日星期四08:55:59 time_test.py [line:23] INFO计时器< _Timer(Thread-1063,initial)> 2017年6月29日星期四08:55:59 time_test.py [line:20] INFO计时器取消< _Timer(Thread-1063,开始14860)> 2017年6月29日星期四08:55:59 time_test.py [line:23] INFO计时器< _Timer(Thread-1064,初始)>
[完成]在114.895秒内以代码= null退出
答案 0 :(得分:1)
计时器取消生效,这就是为什么你没有看到任何" INFO你好"输出。
你的程序没有完成,因为你的无限循环。它取消旧计时器,然后再次调用demo_start(),创建一个新计时器,在下一次迭代中取消,依此类推。