线程管理主要包括线程创建、启动、休眠、等待线程结束和线程停止,线程创建即为我们上一节学习的内容,线程启动的方式为thread.start(),线程休眠的方式为time.sleep(),注意要引入time模块才可以使用线程休眠功能,这一节我们就来学习一下等待线程结束和线程停止。
所谓等待线程结束,就是保证主线程在子线程结束之后结束,使用的依然是join()方法,我们需要在join中设置超时时间,即join(timeout = None)。
代码如下:
import threading import time def test(): print('子线程开始') for i in range(3): print('第%d次执行子线程'%i) time.sleep(1) print('子线程结束') if __name__ == '__main__': print('主线程开始') thread_one = threading.Thread(target=test) thread_one.start() thread_one.join()#如果注释掉再看一下运行结果 print('主线程结束')
运行结果如下:
主线程开始 子线程开始 第0次执行子线程 第1次执行子线程 第2次执行子线程 子线程结束 主线程结束
把代码倒数第二行的等待线程结束注释掉,运行结果为:
主线程开始 子线程开始 第0次执行子线程 主线程结束 第1次执行子线程 第2次执行子线程 子线程结束
运行结果会出现子线程还没有结束,主线程就已经结束的情况,所以我们增加等待线程结束的语句能保障程序的运行。
我们在创建线程之后,如果run()方法或者函数执行结束,那么线程就会停止,但是当我们遇到一些限制条件的时候,例如我们当前的内存不支持过多的线程运行,因此当线程数量超过规定数的时候,我们就要把线程停止,或者我们规定的时间到了之后我们就需要把线程停止。
线程停止的方法我们可以采用设置一个线程停止变量,代码如下:
import time import threading running = True def test(): while running: print('线程开始工作\n') time.sleep(8) print('工作完毕') if __name__ == '__main__': thread = threading.Thread(target = test) thread.start() s = input('是否停止执行,确认停止请输入False:') if s == 'False': running = False
运行结果如下:
线程开始工作 是否停止执行,确认停止请输入False:False 工作完毕
在这里,我们首先是创建了一个使线程停止的变量,然后我们在函数体中进行一个判断,如果这个变量为True就执行相关工作,除了这个变量我们没有设置停止操作,因此只要这个变量不改变,那么工作完毕这条语句是不会被执行的,那么我们在主程序中先创建一个线程来使用这个方法,然后我们可以通过键盘输入指令,如果我们输入的指令为Flase时,那么while中的判断即为False,因此子线程工作完毕。
本文固定URL:https://www.dotcpp.com/course/300
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程