🧵 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实现线程间安全通信。 - 守护线程随主线程结束而结束。