此页面由 AI 自动翻译。查看英文原版

本页目录

  • 在紧密循环中使用 tryGet() 导致 CPU 使用率高
  • 问题
  • 修复方法

我的应用速度很慢

在紧密循环中使用 tryGet() 导致 CPU 使用率高

问题

如果您运行:
Python
1while True:
2    queue.tryGet()
tryGet() 是非阻塞的——无论帧是否准备好,它都会立即返回。 在紧密循环中,这意味着您的程序尽可能快地运行,将一个 CPU 核心占用至最大,并饿死其他线程或进程。

修复方法

a) 添加短暂休眠在调用之间让 CPU 喘息:
Python
1#!/usr/bin/env python3
2import depthai as dai
3import time
4with dai.Pipeline() as pipeline:
5    cam = pipeline.create(dai.node.Camera).build(
6        dai.CameraBoardSocket.CAM_A, sensorFps=19.0
7    )
8    rawQueue = cam.raw.createOutputQueue()
9    pipeline.start()
10    while pipeline.isRunning():
11        rawFrame = rawQueue.tryGet()
12        if rawFrame is not None:
13            print("Got a raw frame")
14        time.sleep(0.001)  # prevents 100% CPU usage
b) 使用 get() 而不是 tryGet()get() 会阻塞直到帧准备好,因此不会发生忙碌循环:
Python
1#!/usr/bin/env python3
2import depthai as dai
3import time
4with dai.Pipeline() as pipeline:
5    cam = pipeline.create(dai.node.Camera).build(
6        dai.CameraBoardSocket.CAM_A, sensorFps=19.0
7    )
8    rawQueue = cam.raw.createOutputQueue()
9    pipeline.start()
10    while pipeline.isRunning():
11        rawFrame = rawQueue.get()
12        print("Got a raw frame")