目 录
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 参数列表
- interval:以秒为单位,指示该线程过多久启动
- function:指示该线程要调用什么函数,执行什么功能
- args:适用于 function 的参数列表
- kwargs:适用于 function 的参数字典
1.2 threading.Timer 属性和方法
基本上 threading.Thread 的属性和方法, threading.Timer 都有,具体请参看先前的文章 Python 多线程编程-01-threading 模块初识 2.1.1 小节。
除此之外,它还有些特殊的方法。
序号 | 属性和方法 | 描述 |
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 之前先打印当前时间。
import threading
import time
words=["a","12","你好!","春风十里"]
timer_list=[]
def show_time_on_word(word):
print(time.ctime()+"==>"+word)
for word in words:
timer=threading.Timer(len(word)*10,show_time_on_word,args=[word])
timer_list.append(timer)
for timer in timer_list:
timer.start()
运行结果如下:
1.3.2 当作定时器调用
希望运行一段代码,每隔 10 秒报时,累计报时 10 次。
import threading
import time
count=0
def show_time():
print("Coming in show time!")
global count
if(count<10):
count+=1
print(time.ctime())
create_timer()
else:
print("All done!")
def create_timer():
timer=threading.Timer(10,show_time)
timer.start()
print(time.ctime()," Starting !")
create_timer()
运行结果
1.3.3 循环调用比同时起一批线程的优越性
1.3.2 主要是循环调用生成 Timer,而1.3.1 则是同时生成一批线程。相比较而言,循环调用更好,通过调用 threading.active_count() 可以看出,此时不会需要多维护线程。
'''
要是大家觉得写得还行,麻烦点个赞或者收藏吧,想个博客涨涨人气,非常感谢!
'''