Python寒假高级培训第五课——多线程(三)

1、定时器

在需要控制线程的启动,程序的运行,具有周期操作的特点,这种时候使用定时器最好不过了

用法:

class threading.Timer(interval, function, args=[], kwargs={})

创建一个timer,在interval秒过去之后,它将以参数args和关键字参数kwargs运行function 。

调用该函数回返回一个定时器的句柄,同时也获得了一个定时器实例。

但是这时,定时器只是被创建,被没有启动,需要调用实例里面的

start()方法启动定时器。如果在定时过程中想要取消该定时器,需要使用cancel()函数。

示例:


def done():
    print("hello")

if __name__ == '__main__':
    #1秒后执行done()
    t1 = threading.Timer(1, done)
    t1.start()

但是定时器只执行了一次,如何要定时器,能够不停的执行下去呢?

一种方法是利用while(True),不停的创建定时器并启动,显然这种方法显得笨拙,而且会一直占用线程。

例如:

def done():
    print("hello")

if __name__ == '__main__':
    #1秒后执行done()
    while True:
        t1 = threading.Timer(1, done)
        t1.start()

另外一种方法,就是在回调函数中,创建定时器并启动,形成递归调用

def done():
    print("hello")
    timer=threading.Timer(1, done)
    timer.start()

if __name__ == '__main__':
    #1秒后执行done()
        t1 = threading.Timer(1, done)
        t1.start()

结果:

 

程序看起来很简单,通过在回调函数里面,重新创建定时器,来使得定时器能够一直工作。

但是值得注意的是,定时器的句柄需要定义成为一个全局变量,这样做的好处是,创建的定时器进程和实例不会堆积,而是覆盖,避免不必要的内存占用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值