自己摸索才能真正理解python的threading.Timer()定时器的用法。

首先让我们看下Timer的源码,怎么定义这个定时时间的:

需要操作的任务在达到设置的定时时间还没有结束,调用Timer()中:调用的函数/方法。

class Timer(Thread):
    """Call a function after a specified number of seconds:

            t = Timer(30.0, f, args=None, kwargs=None)
            t.start()
            t.cancel()     # stop the timer's action if it's still waiting

    """

    def __init__(self, interval, function, args=None, kwargs=None):
        Thread.__init__(self)
        self.interval = interval
        self.function = function
        self.args = args if args is not None else []
        self.kwargs = kwargs if kwargs is not None else {}
        self.finished = Event()

    def cancel(self):
        """Stop the timer if it hasn't finished yet."""
        self.finished.set()

    def run(self):
        self.finished.wait(self.interval)
        if not self.finished.is_set():
            self.function(*self.args, **self.kwargs)
        self.finished.set()

 

举个例子:

import time
from threading import Timer


def fun():
    print("hello, world")


if __name__=='__main__':
    t = Timer(5, fun) # 超过5秒,执行fun函数
    t.start()
    sum = 0
    for i in range(6): 
        sum = i+1
        time.sleep(1)  # 等待了6次超过Timer中的5秒
    t.cancel()  # 结束后将timer取消掉