赞
踩
目 录
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
threading.Timer 是 threading.Thread 的一个派生类,是在指定的时间 n 秒后执行一个函数功能。它会集成 threading.Thread 的很多属性和方法。
Timer的源码实现很简单,收到一个任务后,则创建一个线程,线程逻辑里面最前面插入sleep。如果大家仔细想想,在任务非常多时候,上下文切换也是一个很消耗资源的事情,能不用就不用。
timer=threading.Timer(interval, function, args=None, kwargs=None)
基本上 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 类对象。
下面是一段代码,我希望能依次打印出 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()
运行结果如下:
希望运行一段代码,每隔 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.2 主要是循环调用生成 Timer,而1.3.1 则是同时生成一批线程。相比较而言,循环调用更好,通过调用 threading.active_count() 可以看出,此时不会需要多维护线程。
'''
要是大家觉得写得还行,麻烦点个赞或者收藏吧,想个博客涨涨人气,非常感谢!
'''
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。