Dotcpp  >  编程教程  >  Python进程和线程  >  Python线程管理

Python线程管理

点击打开在线编译器,边学边练

线程管理主要包括线程创建、启动、休眠、等待线程结束和线程停止,线程创建即为我们上一节学习的内容,线程启动的方式为thread.start(),线程休眠的方式为time.sleep(),注意要引入time模块才可以使用线程休眠功能,这一节我们就来学习一下等待线程结束和线程停止。

1. 等待线程结束

所谓等待线程结束,就是保证主线程在子线程结束之后结束,使用的依然是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次执行子线程
子线程结束

运行结果会出现子线程还没有结束,主线程就已经结束的情况,所以我们增加等待线程结束的语句能保障程序的运行。

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

Python教程
第一章 Python入门
第二章 Python基础语法
第三章 Python入门语法
第四章 Python核心语法
第五章 Python函数
第六章 Python面向对象编程
第七章 Python模块
第八章 Python异常处理和程序调试
第九章 Python文件及目录操作
第十章 PythonGUI编程
第十一章 Python进程和线程
第十二章 Python数据库管理
第十三章 Python算法
第十四章 Python爬虫
第十五章 Python实战项目
第十六章 后记
Dotcpp在线编译      (登录可减少运行等待时间)