Ваш оригинальный цикл делает что-то так быстро, как только может. Любая программа, которая выполняет работу, связанную исключительно с процессором, без каких-либо значительных операций блокировки, будет с радостью использовать весь процессор, она просто делает все, что делает быстрее, если процессор быстрее.
Ваше конкретное что-то в основном просто увеличивает значение и делит его на 1000 снова и снова, что неэффективно, но делает его более эффективным, например, изменив цикл на:
import os
import psutil
p = psutil.Process(os.getpid())
while True:
for i in range(1000): pass
print(p.cpu_percent())
удаление всей работы по делению и более эффективное добавление (range
выполняет работу на уровне C) просто означает, что вы делаете 1000 циклов быстрее и print
cpu_percent
чаще (это может немного уменьшает загрузку ЦП, но только потому, что вам может быть print
достаточно, чтобы выходной буфер заполнялся быстрее, чем его можно использовать для отображения, и ваша программа могла иногда блокировать ввод-вывод) .
Дело в том, что если вы скажете компьютеру делать что-то всегда так быстро, как он может, это произойдет. Так что не надо. Используйте sleep
; даже маленький (time.sleep(0.001)
) будет иметь огромное значение.
Для вашего сценария захвата видео кажется, что именно этого вы и хотите. Если источник видео производит достаточно выходных данных, чтобы занять весь ваш процессор, пусть будет так; если это не так, и ваш код блокируется, когда он продвигается, это здорово, но вы не хотите замедлять обработку только ради более низкой загрузки ЦП, если это означает отставание / отбрасывание кадров.