我的应用运行缓慢
在紧循环中使用 tryGet() 导致高 CPU 使用率
问题
Python
1while True:
2 queue.tryGet()tryGet() 是非阻塞的——无论帧是否就绪,它都会立即返回。 在紧循环中,这意味着你的程序尽可能快地旋转,占满一个 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) # 防止 CPU 使用率达到 100%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")