【发布时间】:2019-03-22 19:06:44
【问题描述】:
我有这个程序可以检查当前 Python 进程使用的 CPU 量。
import os
import psutil
p = psutil.Process(os.getpid())
counter = 0
while True:
if counter % 1000 == 0:
print(p.cpu_percent())
counter += 1
输出是:
98.79987719751766
98.79981257674615
98.79975442677997
98.80031017770553
98.80022615662917
98.80020675841527
98.80027781367056
98.80038116157328
98.80055555555509
98.80054906013777
98.8006523704943
98.80072337402265
98.80081374321833
98.80092993219198
98.80030995738038
98.79962549234794
98.79963842975158
98.79916715088079
98.79930277598402
98.7993480085206
98.79921895171654
98.799154456851
从输出中可以看出,这个程序占用了我 100% 的 CPU,我很难理解原因。我注意到放置 time.sleep(0.25) 会导致 CPU 使用率降至零。
在我的实际应用程序中,我有一个类似的 while 循环,并且不能在 while 循环中休眠,因为它正在从 OpenCV 读取视频并且需要保持实时。
import cv2
cap = cv2.VideoCapture("video.mp4")
while True:
success, frame = cap.retrieve()
这个程序和我写的第一个程序一样占用相同的 CPU,但是这个程序解码视频!
如果有人能解释更多,那就太棒了。
【问题讨论】:
-
为什么在一个紧凑的循环中捕获视频帧会占用您所有可用的 CPU 时间?您正在反复指示您的计算机执行大量工作。
-
不,OP 正在比较 CPU 检查程序 捕获视频帧的程序
-
至于你的第一个程序,如果你不在那里放一个
sleep,那么你使用counter并不重要。您的计算机可以非常快地数到 1000,并且也会使用一些 CPU。
标签: python python-3.x opencv cv2