OpenCV摄像头多线程加速与帧率优化实战 - 第2节
2. Python线程基础
threading模块介绍 · 创建线程的两种方式
流畅摄像头 · 多线程加速
2.1 threading 模块概览
Python 的 threading 模块提供了轻量级的并发支持。它基于操作系统的原生线程,允许我们在一个进程中同时执行多个任务。对于摄像头读取这类 I/O 密集型任务,线程可以显著减少等待时间。
| 核心类/函数 | 说明 |
|---|---|
Thread | 表示一个线程实例,是创建线程的主要入口 |
start() | 启动线程,使其进入就绪状态 |
join() | 等待线程终止,阻塞调用方 |
Lock | 互斥锁,用于线程同步 |
current_thread() | 返回当前线程对象 |
2.2 创建线程方式一:函数
通过 threading.Thread(target=函数名) 创建线程,适合简单的任务。调用 start() 后线程开始执行。
import threading
import time
def camera_worker():
for i in range(5):
print(f"[线程] 捕获帧 {i}")
time.sleep(0.2)
t = threading.Thread(target=camera_worker)
t.start()
t.join()
print("主线程继续")
2.3 创建线程方式二:继承 Thread 类
通过继承 threading.Thread 并重写 run() 方法,可以封装更复杂的线程逻辑,也便于传递参数。
import threading
import time
class CameraThread(threading.Thread):
def __init__(self, camera_id):
super().__init__()
self.camera_id = camera_id
def run(self):
for i in range(3):
print(f"摄像头 {self.camera_id} 帧 {i}")
time.sleep(0.3)
ct = CameraThread(0)
ct.start()
ct.join()
2.4 两种方式对比
| 特性 | 函数方式 | 类方式 |
|---|---|---|
| 简洁性 | ⭐ 简单直接 | 稍复杂,但结构清晰 |
| 参数传递 | 通过 args 传递 | 通过 __init__ 自定义 |
| 可扩展性 | 有限 | 可添加方法、属性,适合复杂任务 |
| 典型场景 | 轻量任务、lambda | 需要维护状态或资源 |