线程编程(Thread)
线程基本概念
- 什么是线程
【1】 线程被称为轻量级的进程
【2】 线程也可以使用计算机多核资源,是多任务编程方式
【3】 线程是系统分配内核的最小单元
【4】 线程可以理解为进程的分支任务 - 线程特征
【1】 一个进程中可以包含多个线程
【2】 线程也是一个运行行为,消耗计算机资源
【3】 一个进程中的所有线程共享这个进程的资源
【4】 多个线程之间的运行互不影响各自运行
【5】 线程的创建和销毁消耗资源远小于进程
【6】 各个线程也有自己的ID等特征
threading模块创建线程
【1】 创建线程对象
from threading import Thread
t = Thread()
功能:创建线程对象
参数:target 绑定线程函数
args
元组 给线程函数位置传参
kwargs 字典 给线程函数键值传参
【2】 启动线程
t.start()
【3】 回收线程
t.join([timeout])
线程对象属性
代码示例: day8/thread_attr.py
t.name 线程名称
t.setName() 设置线程名称
t.getName() 获取线程名称
t.is_alive() 查看线程是否在生命周期
t.daemon 设置主线程和分支线程的退出关系
t.setDaemon() 设置daemon属性值
t.isDaemon() 查看daemon属性值
daemon为True时主线程退出分支线程也退出。要在start前设置,通常不和join一起使用。
自定义线程类
- 创建步骤
【1】 继承Thread类
【2】 重写 init 方法添加自己的属性,使用super()加载父类属性
【3】 重写run()方法 - 使用方法
【1】 实例化对象
【2】 调用start自动执行run方法
【3】 调用join回收线程
代码实现
'''
自定义线程类
'''
from threading import Thread
from time import sleep,ctime
class MYThread(Thread):
def __init__(self,target=None,args=(),kwargs=None):
super().__init__() # 此行不许动
self.target=target
self.args=args
self.kwargs=kwargs
def run(self):
self.target(*self.args,**self.kwargs)
def player(sec,name):
for i in range(4):
print("Play%s:%s"%(name,ctime()))
sleep(sec)
t=Thread(target=player,args=(2,),kwargs={"name":'YGK'})
t.start()
t.join()