您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:Python线程编程之Thread详解

51自学网 2022-02-21 10:45:05
  python
这篇教程Python线程编程之Thread详解写得很实用,希望能帮到您。

一、线程编程(Thread)

1、线程基本概念

1.1、什么事线程

  • 线程被称为轻量级的进程
  • 线程也可以使用计算机多核资源,是多任务编程方式
  • 线程是系统分配内核的最小单元
  • 线程可以理解为进程的分支任务

1.2、线程特征

  • 一个进程中可以包含多个线程
  • 线程也是一个运行行为,消耗计算机资源
  • 一个线程中的所有线程共享这个进程的资源
  • 多个线程之间的运行互不影响各自运行
  • 线程的创建和销毁消耗资源远小于进程
  • 各个线程也有自己的ID等特征

二、threading模块创建线程

1、创建线程对象

from threading import Threadt = Thread()功能: 创建线程对象参数: target 绑定线程函数	args 元组 给线程函数位置传参	kwargs 字典 给线程函数键值传参

2、 启动线程

t.start()

3、 回收线程

t.join([timeout])

4、代码演示

"""thread1.py 线程基础使用步骤:1. 封装线程函数2.创建线程对象3.启动线程4.回收线程"""import osfrom threading import Threadfrom time import sleepa = 1# 线程函数def music():    for i in range(3):        sleep(2)        print('播放:黄河大合唱 %s' % os.getpid())    global  a    print("a,",a)    a = 1000# 创建线程对象t = Thread(target=music)# 启动线程t.start()for i in range(3):    sleep(1)    print('播放:beauty love %s' % os.getpid())# 回收线程t.join()print('程序结束')print("a,", a)

5、线程对象属性

1.t.name 线程名称

2.t.setName() 设置线程名称

3.t.getName()获取线程名称

4.t.is_alive() 查看线程是否在生命周期

5.t.daemon 设置主线程和分支线程退出分支线程也退出.要在start前设置 通常不和join 一起使用

6.代码演示

"""thread3.py线程属性演示"""from threading import Threadfrom time import sleepdef fun():    sleep(3)    print('线程属性测试')t = Thread(target=fun, name='ceshi')# 主线程退出分支线程也退出 必须在start前使用 与join 没有意义t.setDaemon(True)t.start()print(t.getName())t.setName('Tedu')print('is alive:', t.is_alive())print('daemon', t.daemon)

6、自定义线程类

1.创建步骤

1.继承Thread类

2.重写 __init__方法添加自己的属性 使用super加载父类属性

3.重写run方法

2.使用方法

1.实例化对象

2.调佣start自动执行run方法

3.调佣join回收线程

代码演示

"""自定义线程类例子"""from threading import Thread# 自定义线程类class ThreadClass(Thread):    # 重写父类 init    def __init__(self, *args, **kwargs):        self.attr = args[0]        # 加载父类init        super().__init__()    # 假设需要很多步骤完成功能    def f1(self):        print('1')    def f2(self):        print(2)    # 重写run 逻辑调佣    def run(self):        self.f1()        self.f2()t = ThreadClass()t.start()t.join()

7、一个很重要的练习 我很多不懂

from threading import Threadfrom time import sleep, ctimeclass MyThread(Thread):    def __init__(self, group=None, target=None, name=None,                 args=(), kwargs=None, *, daemon=None):        super().__init__()        self.fun = target        self.args = args        self.kwargs = kwargs    def run(self):        self.fun(*self.args, **self.kwargs)def player(sec, song):    for i in range(3):        print("Playing %s : %s" % (song, ctime()))        sleep(sec)t = MyThread(target=player, args=(3,), kwargs={'song': '量量'})t.start()t.join()

8、线程间通信

1.通信方法

1.线程间使用全局遍历进行通信

2.共享资源争夺

1.共享资源:多个进程或者线程都可以操作的资源称为共享资源,对共享资源的操作代码段称为临界区

2.影响:对公共资源的无序操作可能会带来数据的混乱,或者操作错误.此时往往需要同步互斥机制协调操作顺序

3.同步互斥机制

1.同步:同步是一种协作关系,为完成操作,多进程或者线程形成一种协调,按照必要的步骤有序执行操作

<br/><a href='/python/29120.html'>详解python读写json文件</a><br/><a href='/python/29118.html'>人脸识别实战之Opencv+SVM实现人脸识别</a><p align=

万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。