ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2022-01-10 12:29:59  阅读:191  来源: 互联网

标签:__ 定时器 Python 第五课 Timer t1 threading done 多线程


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()

结果:

 

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

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

标签:__,定时器,Python,第五课,Timer,t1,threading,done,多线程
来源: https://blog.csdn.net/qq_56688614/article/details/122407745

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有