通过继承threading.Thread可封装线程逻辑,便于管理状态与参数传递。需重写run()方法定义任务,调用start()启动新线程,示例中MyThread类接收名称和延迟时间,执行时打印开始结束信息。关键点包括调用父类__init__()初始化、自定义构造函数传参、避免直接调用run()。扩展如TaskThread类可结合queue收集结果,实现线程间通信,结构清晰易扩展。

在Python中,通过继承 threading.Thread 类可以自定义线程类。这样做的好处是能将线程的逻辑封装在类中,便于管理状态和传递参数。
继承 threading.Thread 的基本方法
要自定义线程类,只需创建一个新类并继承 threading.Thread,然后重写它的 run() 方法。当调用该类实例的 start() 方法时,会自动执行 run() 中的代码,且在新线程中运行。
示例代码:
import threading
import time
class MyThread(threading.Thread):
def __init__(self, name, delay):
super().__init__() # 调用父类构造函数
self.name = name
self.delay = delay
def run(self):
print(f"线程 {self.name} 开始")
time.sleep(self.delay)
print(f"线程 {self.name} 结束")
# 使用自定义线程类
t1 = MyThread("A", 2)
t2 = MyThread("B", 1)
t1.start() # 启动线程,自动调用 run()
t2.start()
t1.join()
t2.join()
print("所有线程执行完毕")
立即学习“Python免费学习笔记(深入)”;
关键点说明
在自定义线程类时,注意以下几点:
- 必须调用父类 __init__:使用 super().__init__() 确保线程对象正确初始化。
- 重写 run() 方法:这是线程执行的主体,不要直接调用 run(),应使用 start() 启动线程。
- 可自定义构造函数:通过 __init__ 接收参数,传入线程所需的数据或配置。
- 线程启动使用 start():调用 start() 才会开启新线程;直接调用 run() 会在当前线程同步执行。
附加功能:传递数据与控制行为
你可以在自定义类中添加更多属性和方法,比如用于控制线程运行、返回结果或通信。
例如,使用队列收集结果:import threading
import queue
class TaskThread(threading.Thread):
def __init__(self, task_id, result_queue):
super().__init__()
self.task_id = task_id
self.result_queue = result_queue
def run(self):
result = f"任务 {self.task_id} 完成"
self.result_queue.put(result)
result_q = queue.Queue()
threads = [(i, result_q) for i in range(3)]
for t in threads:
t.start()
for t in threads:
t.join()
while not result_q.empty():
print(result_q.get())
基本上就这些。继承 threading.Thread 是组织多线程任务的常用方式,结构清晰,易于扩展。










