跳到主要内容

🧵 Python 标准库 - threading 模块详解(多线程编程)

threading 模块用于创建和管理线程,实现多线程并发执行。线程允许程序同时执行多个操作,适合I/O密集型任务和并发处理。


📌 1. 线程基础:创建和启动线程

在 Python 中,线程可以通过 Thread 类创建,线程任务通常传入一个函数作为目标。

导入 threading
导入 时间

定义 线程任务():
打印("线程开始执行")
时间.睡眠(2)
打印("线程执行结束")

# 创建线程对象,目标为线程任务函数

线程 = threading.Thread(目标=线程任务)

# 启动线程

线程.启动()

打印("主线程继续执行")
线程.加入() # 等待线程执行完毕
打印("所有线程执行完毕")

📌 2. 线程同步:锁(Lock

多个线程访问共享资源时,可能产生数据冲突。使用锁来保证同一时间只有一个线程访问资源。

导入 threading

共享资源 = 0
= threading.Lock()

定义 增加资源():
全局 共享资源
for i in 范围(100000):
.获取()
共享资源 += 1
.释放()

线程列表 = []
for i in 范围(5):
线程 = threading.Thread(目标=增加资源)
线程.启动()
线程列表.添加(线程)

for 线程 in 线程列表:
线程.加入()

打印("最终共享资源值:", 共享资源)

📌 3. 线程类继承:自定义线程类

继承 threading.Thread 类并重写 run() 方法实现自定义线程。

导入 threading
导入 时间

我的线程(threading.Thread):
定义 **初始化**(自身, 名称):
threading.Thread.**初始化**(自身)
自身.名称 = 名称



线程1 = 我的线程("线程A")
线程2 = 我的线程("线程B")

线程1.启动()
线程2.启动()

线程1.加入()
线程2.加入()
打印("所有自定义线程执行完毕")

📌 4. 线程通信:使用 queue.Queue

多线程中用队列安全传递数据,避免资源竞争。

导入 threading
导入 queue
导入 时间

队列 = queue.Queue()

定义 生产者():
对于 i范围(5):
打印("生产者生成数据", i)
队列.放入(i)
时间.睡眠(1)

定义 消费者():
while True:
数据 = 队列.获取()
打印("消费者处理数据", 数据)
队列.任务完成()

线程1 = threading.Thread(目标=生产者)
线程2 = threading.Thread(目标=消费者, 守护=真)

线程1.启动()
线程2.启动()

线程1.加入()
队列.加入()
打印("所有任务完成")

📌 5. 守护线程(daemon

守护线程在主线程结束时自动结束,常用于后台任务。

示例中,消费者线程设置为守护线程。


总结

  • threading.Thread 创建线程,.启动()运行,.加入()等待线程结束。
  • Lock 锁用于线程同步,避免数据竞争。
  • 继承 Thread 实现自定义线程类。
  • 通过 queue.Queue 实现线程间安全通信。
  • 守护线程随主线程结束而结束。