Python threading 模块基础用法与多线程同步指南

Leo
Leo
发布时间:2026-10-12| 3人浏览过
原创

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 并发编程的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。