

在上次的文章Python基础篇 - 多进程-进程的创建中,我们认识了多进程创建的基本方式。今天的Python基础篇知识将介绍多线程的创建。
关于进程与线程的概念,在文章Python基础篇 - 进程与线程、并发与并行有详细的介绍,再简述一遍就是:
1.线程是处理器任务调度和执行的基本单位。
2.一个进程包含至少一个线程,一个进程相当于一个独立工厂,线程相当于工厂内部的多条流水线。
3.多个线程间可以共享数据,这与多进程是不同的。简单理解下就是一个工厂内部的流水线是相通的。
4.所谓多线程就是在一个进程中,运行着多个线程。一个工厂里面流通着多条流水线。

一.基于threading模块创建多线程
主要流程:
1.定义任务函数(线程要执行的代码)
2.实例化Thread类,指定target目标函数、args参数
3.调用start()启动线程
4.调用join()主线程等待子线程结束
# 基于threading模块创建多线程import threadingimport time# 1.定义线程要执行的任务函数# 实际任务会是不同的具体任务,这里只是模拟一下,理解概念def work(name):print(f"子线程{name}开始执行")time.sleep(2) # 模拟任务耗时print(f"子线程{name}执行完毕")if __name__ == "__main__":print("主线程开始")# 1.创建子线程对象# target参数为任务函数# args参数为任务函数所需的参数元组t1 = threading.Thread(target=work, args=("线程1",))t2 = threading.Thread(target=work, args=("线程2",))# 2.启动线程t1.start()t2.start()# 3.等待线程执行结束t1.join()t2.join()print("主线程结束")
二.基于自定义Thread子类创建多线程
当然,我们还可以通过继承Thread父类,实现一个子类,从而达到创建多线程的目的。
主要流程:
1.自定义子类,继承threading.Thread
2.重写__init__初始化方法(必须调用父类初始化)
3.重写run()方法(线程真正要执行的任务写在这里)
4.创建自定义类对象,调用start()启动线程
# 自定义Thread子类实现多线程import threadingimport time# 1.自定义线程子类,继承Threadclass MyThread(threading.Thread):# 重写初始化方法def __init__(self, name):super().__init__() # 必须调用父类初始化self.name = name# 重写run方法:线程核心任务逻辑def run(self):print(f"子线程{self.name}开始执行")time.sleep(2)print(f"子线程{self.name}执行完毕")if __name__ == "__main__":print("主线程开始")# 1.创建自定义线程对象t1 = MyThread("自定义线程1")t2 = MyThread("自定义线程2")# 2.启动线程t1.start()t2.start()# 3.等待线程结束t1.join()t2.join()print("主线程结束")

总结:今日我们学习了Python基础篇-多线程-线程的创建。多线程属于轻量级并发操作,线程之间共享全局变量,开销远小于多进程。我们认识了第一种创建Thread对象方法去创建线程,适合简单临时任务;第二种继承Thread子类并重写run()方法,适合复杂项目封装。线程必须调用start()启动、join()等待执行完毕,进一步夯实了多线程并发编程的基础认知。在Python基础篇,后续我们将持续学习Python基础知识,介绍各种算法,祝每一位study er学习愉快。

