Python之threading(二)

文摘   2020-07-24 09:58  

前面记录了threading库Thread类最基本的用法,如何实现多个程序并行运行,这次写一下如何实现先后顺序。


上一篇提到了Thread的join()方法可以实现让并行运行的程序有先后顺序,这里估计有人脑袋里冒出了问号,既然是要并行运行,为啥又要有先后顺序,要有先后还搞并行干嘛!我一开始也是这么想的,但是实际中还是有些不一样的需求的。这里还是拿上次WiFi throughput测试来举例说明,比如我们同时查询RSSI和跑throughput,但实际上它们还是有先后的,我们应该是要先跑throughput,再查RSSI,这样才能达到我们的目的。如果我们先查RSSI,这时候throughput还没跑起来,查询RSSI可能就会出现不准确的情况,所以这里要有先后顺序,但是如果不用并行的话我们实现不了同时运行的功能,所以并行和顺序两者在这里都有体现。下面我们还是上代码来看看实际运行的情况。

import threadingfrom 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 t1test t1test t2test t2

这里加入jion()方法后就会一直等待对应线程的结束,但是可以参数赋值来设置等待的时间。

def join(self, timeout=None):

timeout是一个浮点参数,单位是秒。比如果我们修改上面的代码:

t1.join(0.5)

来看看运行结果:

test t1test t2test t1test t2

这样就在t1执行后0.5秒t2也开始执行了,实际场景可能更复杂多变,需要灵活应用。


好了,我要滚去学习了,下次看Thread的deamon参数。


硬件开发和测试
硬件开发和测试相关内容