OpenCV摄像头多线程加速与帧率优化实战 - 第2节

2. Python线程基础

threading模块介绍 · 创建线程的两种方式 流畅摄像头 · 多线程加速

2.1 threading 模块概览

Python 的 threading 模块提供了轻量级的并发支持。它基于操作系统的原生线程,允许我们在一个进程中同时执行多个任务。对于摄像头读取这类 I/O 密集型任务,线程可以显著减少等待时间。

核心类/函数说明
Thread表示一个线程实例,是创建线程的主要入口
start()启动线程,使其进入就绪状态
join()等待线程终止,阻塞调用方
Lock互斥锁,用于线程同步
current_thread()返回当前线程对象
threading Thread Lock RLock start() join() acquire()

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("主线程继续")
主线程 Thread(target=…) camera_worker()

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()
class CameraThread 继承 Thread run() 方法 self.camera_id

2.4 两种方式对比

特性函数方式类方式
简洁性⭐ 简单直接稍复杂,但结构清晰
参数传递通过 args 传递通过 __init__ 自定义
可扩展性有限可添加方法、属性,适合复杂任务
典型场景轻量任务、lambda需要维护状态或资源
函数方式 Thread(target=fn) 类方式 class MyThread(Thread)