Python菜鸟教程:线程管理

2022-08-0521:09:20编程语言入门到精通Comments795 views字数 1463阅读模式

线程管理主要包括线程创建、启动、休眠、等待线程结束和线程停止,线程创建即为我们上一节学习的内容,线程启动的方式为thread.start(),线程休眠的方式为time.sleep(),注意要引入time模块才可以使用线程休眠功能,这一节我们就来学习一下等待线程结束和线程停止。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26601.html

1. 等待线程结束文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26601.html

所谓等待线程结束,就是保证主线程在子线程结束之后结束,使用的依然是join()方法,我们需要在join中设置超时时间,即join(timeout = None)。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26601.html

代码如下:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26601.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import threading
import time
def test():
    print('子线程开始')
    for 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('主线程结束')

运行结果如下:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26601.html

1
2
3
4
5
6
7
主线程开始
子线程开始
0次执行子线程
1次执行子线程
2次执行子线程
子线程结束
主线程结束

把代码倒数第二行的等待线程结束注释掉,运行结果为:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26601.html

1
2
3
4
5
6
7
主线程开始
子线程开始
0次执行子线程
主线程结束
1次执行子线程
2次执行子线程
子线程结束

运行结果会出现子线程还没有结束,主线程就已经结束的情况,所以我们增加等待线程结束的语句能保障程序的运行。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26601.html

  2. 线程停止文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26601.html

我们在创建线程之后,如果run()方法或者函数执行结束,那么线程就会停止,但是当我们遇到一些限制条件的时候,例如我们当前的内存不支持过多的线程运行,因此当线程数量超过规定数的时候,我们就要把线程停止,或者我们规定的时间到了之后我们就需要把线程停止。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26601.html

线程停止的方法我们可以采用设置一个线程停止变量,代码如下:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26601.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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()
    = input('是否停止执行,确认停止请输入False:')
    if == 'False':
        running = False

运行结果如下:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26601.html

1
2
3
线程开始工作
是否停止执行,确认停止请输入False:False
工作完毕

在这里,我们首先是创建了一个使线程停止的变量,然后我们在函数体中进行一个判断,如果这个变量为True就执行相关工作,除了这个变量我们没有设置停止操作,因此只要这个变量不改变,那么工作完毕这条语句是不会被执行的,那么我们在主程序中先创建一个线程来使用这个方法,然后我们可以通过键盘输入指令,如果我们输入的指令为Flase时,那么while中的判断即为False,因此子线程工作完毕。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26601.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/ymba/26601.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定