当前位置:   article > 正文

Python 多线程编程-06-threading 模块 - Timer_threading.timer

threading.timer

目   录

1 threading.Timer

1.1 threading.Timer 构造

1.1.1 threading.Timer 构造函数

1.1.2 参数列表

1.2 threading.Timer 属性和方法

1.3 threading.Timer 使用示范

1.3.1 简单延迟调用

1.3.2 当作定时器调用

1.3.3 循环调用比同时起一批线程的优越性


Python 多线程编程目录

Python 多线程编程-01-threading 模块初识

Python 多线程编程-02-threading 模块-锁的使用

Python 多线程编程-03-threading 模块 - Condition

Python 多线程编程-04-threading 模块 - Event

Python 多线程编程-05-threading 模块 - Semaphore 和 BoundedSemaphore

Python 多线程编程-06-threading 模块 - Timer  

Python 多线程编程-07-threading 模块 - Barrier

1 threading.Timer

     threading.Timer 是 threading.Thread 的一个派生类,是在指定的时间 n 秒后执行一个函数功能。它会集成 threading.Thread 的很多属性和方法。

      Timer的源码实现很简单,收到一个任务后,则创建一个线程,线程逻辑里面最前面插入sleep。如果大家仔细想想,在任务非常多时候,上下文切换也是一个很消耗资源的事情,能不用就不用。

1.1 threading.Timer 构造

1.1.1 threading.Timer 构造函数

        timer=threading.Timer(interval, function, args=None, kwargs=None)

1.1.2 参数列表

  1. interval:以秒为单位,指示该线程过多久启动
  2. function:指示该线程要调用什么函数,执行什么功能
  3. args:适用于 function 的参数列表
  4. kwargs:适用于 function 的参数字典

1.2 threading.Timer 属性和方法

        基本上  threading.Thread 的属性和方法, threading.Timer 都有,具体请参看先前的文章 Python 多线程编程-01-threading 模块初识 2.1.1 小节

        除此之外,它还有些特殊的方法。

threading.Timer 属性和方法
序号属性和方法描述
1属性 args适用于 function 的参数列表
2属性 interval以秒为单位,指示该线程过多久启动
3属性 kwargs适用于 function 的参数字典
4方法 stop()如果这个 Timer 还没有结束,则结束之。

        此外一个 threading.Timer 对象,如果调用 .finished() 方法,则是得到一个 threading.Event 类对象。 

1.3 threading.Timer 使用示范

1.3.1 简单延迟调用

下面是一段代码,我希望能依次打印出 words 列表中的 word,每个线程延迟时间取决于 word 的长度,并且每次打印 word 之前先打印当前时间。

  1. import threading
  2. import time
  3. words=["a","12","你好!","春风十里"]
  4. timer_list=[]
  5. def show_time_on_word(word):
  6. print(time.ctime()+"==>"+word)
  7. for word in words:
  8. timer=threading.Timer(len(word)*10,show_time_on_word,args=[word])
  9. timer_list.append(timer)
  10. for timer in timer_list:
  11. timer.start()

运行结果如下:

1.3.2 当作定时器调用

希望运行一段代码,每隔 10 秒报时,累计报时 10 次。

  1. import threading
  2. import time
  3. count=0
  4. def show_time():
  5. print("Coming in show time!")
  6. global count
  7. if(count<10):
  8. count+=1
  9. print(time.ctime())
  10. create_timer()
  11. else:
  12. print("All done!")
  13. def create_timer():
  14. timer=threading.Timer(10,show_time)
  15. timer.start()
  16. print(time.ctime()," Starting !")
  17. create_timer()

运行结果

  

1.3.3 循环调用比同时起一批线程的优越性

1.3.2 主要是循环调用生成 Timer,而1.3.1 则是同时生成一批线程。相比较而言,循环调用更好,通过调用 threading.active_count() 可以看出,此时不会需要多维护线程。

'''

要是大家觉得写得还行,麻烦点个赞或者收藏吧,想个博客涨涨人气,非常感谢!

'''

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/768834
推荐阅读
相关标签
  

闽ICP备14008679号