Python在计时器中循环。卡塞尔没有生效,最终退出

时间:2017-06-29 01:02:08

标签: python multithreading timer

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退出

1 个答案:

答案 0 :(得分:1)

计时器取消生效,这就是为什么你没有看到任何" INFO你好"输出。

你的程序没有完成,因为你的无限循环。它取消旧计时器,然后再次调用demo_start(),创建一个新计时器,在下一次迭代中取消,依此类推。