Python多线程创建详解:函数与类两种实现方式及核心API
本文详解Python中创建多线程的两种核心方式:通过函数直接实例化Thread类,以及继承Thread类并覆写run方法。文章深入解析了Thread构造函数的参数用法,并系统梳理了start、join、is_alive、daemon等常用线程控制API,帮助开发者掌握Python并发编程的基础技能。
大家好,欢迎来到并发编程系列的第二篇内容。
本篇内容侧重于基础知识的梳理,旨在帮助新手读者无障碍地理解后续复杂概念。通过巩固基础,大家能够更顺畅地跟随我的思路,深入理解后续的进阶文章。
本文目录如下:
- 掌握使用函数创建多线程的方法
- 掌握使用类创建多线程的方法
- 多线程开发中必学的关键函数解析
经过总结,Python中创建多线程主要包含以下两种途径:
- 利用函数直接创建
- 利用类继承创建
接下来,我们将深入解析多线程的具体实现细节。
使用函数创建多线程
一、掌握使用函数创建多线程
在Python3环境中,系统内置了threading.Thread模块,该模块提供了便捷的接口,使我们能够轻松创建多线程应用。
调用threading.Thread()构造函数时,通常涉及两个关键参数:
- 目标函数名(target):指定线程后台执行的具体函数,由开发者自定义。注意此处仅传递函数名,切勿添加括号。
- 目标函数参数(args):以元组形式传递目标函数所需的参数。若目标函数无需参数,则可省略此参数。
具体示例如下:
import time
from threading import Thread
# 自定义线程函数。
def main(name="Python"):
for i in range(2):
print("hello", name)
time.sleep(1)
# 创建线程01,不指定参数
thread_01 = Thread(target=main)
# 启动线程01
thread_01.start()
# 创建线程02,指定参数,注意逗号
thread_02 = Thread(target=main, args=("MING",))
# 启动线程02
thread_02.start()
运行上述代码后,控制台将输出以下结果:
hello Python hello MING hello Python hello MING
这种实现方式是否非常简单?别急,接下来介绍的类实现方式同样简洁。
使用类创建多线程
二、掌握使用类创建多线程
相较于函数方式,通过类来创建线程的实现逻辑稍显复杂。
首先,我们需要自定义一个类,该类需满足以下两点要求:
- 必须继承threading.Thread父类;
- 必须覆写(override)run方法。
这里的run方法功能与前述线程函数类似,用于编写具体的业务逻辑代码。当调用start()方法启动线程后,系统会自动执行run方法。
参考以下示例代码:
为了便于对比,run函数内部复用了前述main函数的逻辑。
import time
from threading import Thread
class MyThread(Thread):
def __init__(self, name="Python"):
# 注意,super().__init__() 一定要写
# 而且要写在最前面,否则会报错。
super().__init__()
self.name=name
def run(self):
for i in range(2):
print("hello", self.name)
time.sleep(1)
if __name__ == '__main__':
# 创建线程01,不指定参数
thread_01 = MyThread()
# 创建线程02,指定参数
thread_02 = MyThread("MING")
thread_01.start()
thread_02.start()
最终运行结果与函数方式完全一致:
hello Python hello MING hello Python hello MING
Thread类常用方法解析
三、多线程开发中必学的关键函数解析
学习完上述两种线程创建方式后,你可能会觉得实现过程异常简单,毫无难度。
然而事实并非如此。前文示例为了便于理解,仅使用了最简化的代码逻辑。在实际生产环境中,多线程运行期间可能会遇到诸多复杂问题,只是目前尚未深入触及这些难点。
不过无需担忧,在后续章节中,我将带领大家逐一探讨这些潜在难题及其解决方案。
工欲善其事,必先利其器。我们首先需要熟悉Python提供的Thread类所具备的常用方法和属性,明确其具体功能。掌握这些基础知识,将有助于我们在后续的高级学习中更加得心应手。
经过归纳,Thread类常用的方法主要包括以下几项:
t=Thread(target=func)
# 启动子线程
t.start()
# 阻塞子线程,待子线程结束后,再往下执行
t.join()
# 判断线程是否在执行状态,在执行返回True,否则返回False
t.is_alive()
t.isAlive()
# 设置线程是否随主线程退出而退出,默认为False
t.daemon = True
t.daemon = False
# 设置线程名
t.name = "My-Thread"
至此,Python线程的基础知识介绍完毕。
以上就是本文的全部内容,希望能为各位的学习提供有益帮助,也欢迎大家继续支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









