前面记录了threading库Thread类最基本的用法,如何实现多个程序并行运行,这次写一下如何实现先后顺序。
上一篇提到了Thread的join()方法可以实现让并行运行的程序有先后顺序,这里估计有人脑袋里冒出了问号,既然是要并行运行,为啥又要有先后顺序,要有先后还搞并行干嘛!我一开始也是这么想的,但是实际中还是有些不一样的需求的。这里还是拿上次WiFi throughput测试来举例说明,比如我们同时查询RSSI和跑throughput,但实际上它们还是有先后的,我们应该是要先跑throughput,再查RSSI,这样才能达到我们的目的。如果我们先查RSSI,这时候throughput还没跑起来,查询RSSI可能就会出现不准确的情况,所以这里要有先后顺序,但是如果不用并行的话我们实现不了同时运行的功能,所以并行和顺序两者在这里都有体现。下面我们还是上代码来看看实际运行的情况。
import threading
from time import sleep
# 定义一个测试函数
def test(i):
print('test',i)
sleep(1)
print('test',i)
sleep(1)
if __name__ == '__main__'
t1 = threading.Thread(target=test, args=('t1',)) #这里有个关键的地方是target的内容是要执行的函数名,不是函数,就是说不要把后面的括号还有参数直接写进来,参数用args来传递
t2 = threading.Thread(traget=test, args=('t2',)) #再加入一个进程,当然对象也可以是其他你想要的函数
t1.start() #启动Thread对象
t1.join()
t2.start()
运行结果:
test t1
test t1
test t2
test t2
这里加入jion()方法后就会一直等待对应线程的结束,但是可以参数赋值来设置等待的时间。
def join(self, timeout=None):
timeout是一个浮点参数,单位是秒。比如果我们修改上面的代码:
t1.join(0.5)
来看看运行结果:
test t1
test t2
test t1
test t2
这样就在t1执行后0.5秒t2也开始执行了,实际场景可能更复杂多变,需要灵活应用。
好了,我要滚去学习了,下次看Thread的deamon参数。