Python threading 模块基础用法与多线程同步指南
Python threading 模块提供独立的锁、条件变量与线程调度接口。本文梳理核心类与构造参数,演示 target 函数与继承 Thread 类两种创建方式,详解 start 启动、join 阻塞同步及守护线程退出机制,助您掌握 Python 并发编程基础。
threading 模块核心组件与工具函数
threading 模块在 Python 中是独立的对象体系,与 Java 不同,锁(Lock)和条件变量(Condition)不再是内置对象的行为,而是需显式导入的独立类。模块主要提供以下核心类:
- Thread:线程基类
- Lock / RLock:互斥锁与可重入锁
- Condition:条件变量,用于线程间通信
- [Bounded]Semaphore:信号量,控制并发访问数量
- Event:事件标志位,用于简单线程通知
- Timer:延迟执行器
- local:线程局部数据存储
常用辅助方法包括:threading.currentThread() 获取当前线程变量;threading.enumerate() 返回运行中(启动后、结束前)的线程列表;threading.activeCount() 返回活跃线程数,结果与 len(threading.enumerate()) 一致。
创建线程的两种标准方式
第1步:通过 target 参数绑定调用函数
适用于轻量级任务。将目标函数作为 target 传入构造器,可通过 args 和 kwargs 传递参数。线程名 name 默认为 None,group 目前必须为 None。
import threading
def worker_task():
print('func() passed to Thread')
t = threading.Thread(target=worker_task)
t.start()
第2步:继承 Thread 类并重写 run 方法
适用于需要维护自定义状态或多阶段任务。继承后重写 run(),实例化后调用 start() 即可触发。
import threading
class CustomThread(threading.Thread):
def run(self):
print('MyThread extended from Thread')
t = CustomThread()
t.start()
线程执行控制与同步机制
创建线程后,需通过实例方法控制生命周期。常用方法包括 isAlive() 检查存活状态,getName()/setName() 管理标识名,以及 setDaemon(bool) 设置守护模式。
第3步:启动线程与 join 阻塞等待
start() 分配资源并启动新线程,使其进入可运行状态。join([timeout]) 会让调用方线程阻塞,直到目标线程终止或达到指定超时时间。这是实现主线程等待子任务完成的经典做法。
import threading
import time
def sub_thread_action():
print('in threadJoin.')
time.sleep(1)
print('out threadJoin.')
def main_context(t_join_target):
print('in threadContext.')
t_join_target.start()
# 阻塞当前上下文,直到 t_join_target 执行完毕
t_join_target.join()
print('out threadContext.')
t_join = threading.Thread(target=sub_thread_action)
t_main = threading.Thread(target=main_context, args=(t_join,))
t_main.start()
上述代码运行后将严格输出顺序:
in threadContext.
in threadJoin.
out threadJoin.
out threadContext.
第4步:配置守护线程自动退出
默认情况下,非守护线程会保持进程运行直至自身结束。调用 t.setDaemon(True) 可将线程设为守护模式。当所有非守护线程终止时,程序将立即强行终止剩余守护线程并退出。适用于日志写入、心跳检测等无需阻塞主流程的辅助任务。
关键注意事项
原文标题中的“超线程”通常指 CPU 硬件层面的并行技术(Hyper-Threading),而 Python 的 threading 属于软件级线程调度。受 Python 全局解释器锁(GIL)限制,CPython 中 threading 无法实现真正的多核并行计算,仅对 I/O 密集型任务(如网络请求、文件读写)有效。若需利用多核 CPU 进行计算加速,应切换至 multiprocessing 模块。此外,现代 Python 版本已弃用 Python 2 风格的无括号 print 语法,示例代码已统一调整为 Python 3 标准写法。
以上就是 Python threading 模块基础用法与线程同步的详细教程,更多关于 Python 并发编程的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













