这篇教程Python线程编程之Thread详解写得很实用,希望能帮到您。
一、线程编程(Thread)
1、线程基本概念
1.1、什么事线程 - 线程被称为轻量级的进程
- 线程也可以使用计算机多核资源,是多任务编程方式
- 线程是系统分配内核的最小单元
- 线程可以理解为进程的分支任务
1.2、线程特征 - 一个进程中可以包含多个线程
- 线程也是一个运行行为,消耗计算机资源
- 一个线程中的所有线程共享这个进程的资源
- 多个线程之间的运行互不影响各自运行
- 线程的创建和销毁消耗资源远小于进程
- 各个线程也有自己的ID等特征

二、threading模块创建线程
1、创建线程对象from threading import Threadt = Thread()功能: 创建线程对象参数: target 绑定线程函数 args 元组 给线程函数位置传参 kwargs 字典 给线程函数键值传参
2、 启动线程
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=]()
|