J'ai ce programme qui vérifie la quantité de CPU utilisée par le processus actuel Python.
import cv2 cap = cv2.VideoCapture("video.mp4") while True: success, frame = cap.retrieve()
3 Réponses :
J'espère que vous allez bien!
Lorsque vous faites: p> Vous demandez réellement à votre ordinateur de traiter constamment. p> Il va augmenter Cela signifie que votre programme alimente constamment la CPU avec les instructions d'incrémentation de ce compteur. P> Lorsque vous utilisez le sommeil, vous dites essentiellement au système d'exploitation (système d'exploitation) que votre Le code ne devrait pas exécuter quelque chose de nouveau avant le sommeil. Votre code ne mettra alors à inonder la CPU avec des instructions. P> Dormir suspend son exécution pour le nombre donné de secondes. P> Il est préférable d'utiliser un sommeil que le compteur. P> compteur code> aussi vite que possible et affichera le
cpu_percent code> chaque fois
compteur code> est modulo de 1000 . P>
import os
import psutil
import time
p = psutil.Process(os.getpid())
counter = 0
while True:
time.sleep(1)
print(p.cpu_percent())
Votre boucle d'origine fait quelque chose em> aussi vite que possible. Tout programme qui fait du travail purement lié à la CPU, sans opérations de blocage significatifs impliqués, sera heureux de consommer tout le CPU, mais il fait tout ce qu'il fait plus vite si le processeur est plus rapide. Votre particulier est surtout incrémenté une valeur et la divisant par 1000 encore et encore, ce qui est inefficace, mais la rendant plus efficace, par exemple En modifiant la boucle à: p> supprimer tout le travail de division et avoir un ajout plus efficace ( point est, Si vous dites à l'ordinateur de faire quelque chose pour toujours aussi vite que possible, cela le fera. Alors ne le fais pas. Utilisez un Pour votre scénario de capture vidéo, on dirait que c'est ce que vous voulez en premier lieu. Si la source vidéo produise suffisamment de sortie pour occuper votre CPU entier, alors soyez-le; Si ce n'est pas le cas, et que votre code bloque quand il va de l'avance, c'est génial, mais vous ne voulez pas ralentir le traitement uniquement pour l'utilisation de la CPU inférieure si cela signifie tomber derrière / déposer des cadres. P> p> plage code> fait l'œuvre de la couche C), serait juste que vous voulez dire que vous faites les 1000 boucles plus rapidement et
impression code> le
cpu_percent code> plus souvent (cela pourrait légèrement em> réduire la consommation de la CPU, mais seulement parce que vous pourriez Soyez suffisamment d'impression que le tampon de sortie est rempli plus rapidement qu'il ne peut être drainé pour l'affichage et votre programme pourrait finir de manière occasionnelle sur des E / S). P>
dormir code>; Même un petit (
temps.sleep (0.001) code>) ferait une énorme différence. p>
Vous voudrez peut-être ajouter une fois.sleep (NumberOfseconds) à votre boucle si vous ne voulez pas qu'il utilise 100% de processeur tout le temps, s'il ne s'agit que d'une certaine condition. Je pense que cela résoudra votre problème p>
Pourquoi est-il surprenant que la capture de cadres vidéo dans une boucle serrée prend tout votre temps de processeur disponible? Vous demandez à votre ordinateur de faire beaucoup de travail, à plusieurs reprises.
Non, op était comparer i> le programme de la vérification du processeur à i> un programme de capture de cadres vidéo
Et quant à votre premier programme, si vous ne mettez pas de
dormez code> là-bas, il n'a pas vraiment d'importance que vous utilisez le compteur
code> du tout. Votre ordinateur peut compter sur 1000 très rapidement et utiliser un CPU à cela aussi.