①. 线程被称为轻量级的进程
②. 线程也可以使用计算机多核资源,是多任务编程方式
③. 线程是系统分配内核的最小单元
④. 线程可以理解为进程的分支任务
①. 一个进程中可以包含多个线程
②. 线程也是一个运行行为,消耗计算机资源
③. 一个进程中的所有线程共享这个进程的资源
④. 多个线程之间的运行互不影响各自运行
⑤. 线程的创建和销毁消耗资源远小于进程
⑥. 各个线程也有自己的ID等特征
①.创建线程对象
- from threading import Thread
-
- t = Thread()
-
- 功能:创建线程对象
- 参数:target 绑定线程函数
- args 元组 给线程函数位置传参
- kwargs 字典 给线程函数键值传参
-
②.启动线程
- t.start()
-
③.回收线程
- t.join([timeout])
-
- from threading import Thread
- from time import sleep
- import os
-
- # 线程函数
- def game():
- for i in range(3):
- sleep(2)
- print(os.getpid(),"后裔:万箭齐发")
-
- # 创建线程对象
- t = Thread(target=game)
- t.start() # 启动线程 执行game
-
- for i in range(4):
- sleep(1)
- print(os.getpid(),"后裔:嗑药回血")
-
- t.join() # 回收线程资源
-
- from threading import Thread
- from time import sleep
- import os
- # 含有参数的线程函数
- def fun(sec,name):
- print("线程函数参数",os.getpid())
- sleep(sec)
- print("%s 线程完毕"%name)
-
- # 创建多线程
- jobs = []
- for i in range(5):
- t = Thread(target=fun,args=(2,),kwargs={'name':"T%d"%i})
- jobs.append(t)
- t.start()
-
- for i in jobs:
- i.join()
-
- t.name 线程名称
-
- t.setName() 设置线程名称
-
- t.getName() 获取线程名称
-
- t.is_alive() 查看线程是否在生命周期
-
- t.daemon 设置主线程和分支线程的退出关系
-
- t.setDaemon() 设置daemon属性值
-
- t.isDaemon() 查看daemon属性值
-
- from threading import Thread
- from time import sleep
-
- def fun():
- sleep(3)
- print("线程属性测试")
-
- t = Thread(target=fun, name="MyThread")
-
- # 主线程退出分支线程也退出
- t.setDaemon(True)
- t.start()
- t.setName("MyThread")
-
- print("Name:", t.getName()) # 线程名称
- print("Alive:", t.is_alive()) # 线程生命周期
- print("is Daemon", t.isDaemon())
-
①.继承Thread类
②. 重写__init__方法添加自己的属性,使用super加载父类属性
③.重写run方法
①.实例化对象
②.调用start自动执行run方法
③.调用join回收线程
- from threading import Thread
- from time import sleep, ctime
- class MyThread(Thread):
- def __init__(self, target=None,
- args=(), kwargs={}):
- super().__init__()
- self.target = target
- self.args = args
- self.kwargs = kwargs
-
- def run(self):
- self.target(*self.args, **self.kwargs)
- # ***************************
- # 通过完成上面的MyThread使程序正常运行
- # 通过下面程序可以让player作为线程运行
- # player只是测试函数,名称和参数均不确定
- # ***************************
- 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()
-