You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python多摄像头视频处理程序持续占满CPU资源,是代码错误导致的吗?

问题原因

导致CPU占用拉满的核心原因是代码中存在多处无阻塞的忙等待循环,没有做帧率控制,所有循环会尽可能抢占CPU资源全速运行:

  • 主函数main()中的无限while True循环没有任何等待逻辑,会以CPU能达到的最高频率反复读取getFrame.frame、赋值给showFrame.frame,绝大多数执行都是无意义的空转。
  • getFrames.getFrames()的读取循环、showFrames.showFrame()的渲染循环同样没有设置帧率匹配逻辑,除了IO阻塞的极短时间外,其余时间都会持续占用CPU执行。
  • 存在冗余的资源初始化操作:getFrames类实例化时已经在__init__方法中调用了videoInit初始化摄像头,主函数中再次调用getFrame.videoInit(videoSource)属于重复初始化,会额外占用系统资源。
  • 线程间采用共享变量轮询的方式传递帧,没有用阻塞队列等机制,轮询过程会持续消耗CPU。

修复方案

  • 给所有循环添加和摄像头帧率匹配的等待逻辑,比如你的摄像头是30FPS,那么可以在每次循环末尾加time.sleep(1/30),避免循环空转。
  • 改用队列实现线程间的帧传递:getFrames读取到新帧后写入队列,主函数从队列阻塞取帧,有新帧才进行后续处理,没有新帧时线程进入休眠不占用CPU。
  • 删除主函数中冗余的getFrame.videoInit(videoSource)调用,避免重复初始化摄像头。
  • 如果不需要实时打印线程数,可删除主循环内的print调用,减少不必要的IO消耗。

内容的提问来源于stack exchange,提问作者Albert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 07:48:00