2008-11-09 4 views
14

Est-il possible pour moi de voir la quantité d'utilisation du processeur (% du maximum) que l'application actuelle, python, utilise?Utilisation du processeur par processus en Python

Scénario: Mon hôte me permettra d'exécuter mon application tant qu'elle ne consomme pas plus de X% de la puissance du processeur, donc je voudrais qu'il surveille lui-même et ralentisse. Alors, comment puis-je savoir combien de CPU l'application utilise?

Plate-forme cible est * nix, mais je voudrais le faire sur un hôte Win également.

Répondre

25
>>> import os 
>>> os.times() 
(1.296875, 0.765625, 0.0, 0.0, 0.0) 
>>> print os.times.__doc__ 
times() -> (utime, stime, cutime, cstime, elapsed_time) 

Return a tuple of floating point numbers indicating process times. 

Du (2,5) manuel:

fois()

Retourner un 5-tuple de nombres à virgule flottante indiquant accumulé (processeur ou autre) fois, en secondes. Les éléments sont: l'heure de l'utilisateur, l'heure du système, l'heure utilisateur des enfants, l'heure système des enfants et le temps réel écoulé depuis un point fixe dans le passé, dans cet ordre. Voir les temps de la page de manuel Unix (2) ou la documentation de l'API Windows Platform correspondante. Disponibilité: Macintosh, Unix, Windows.

6

Le module resource fournit getrusage qui peut vous fournir les informations dont vous avez besoin, au moins pour les plates-formes de type Unix.

Notez que l'utilisation de l'UC en pourcentage est toujours mesurée sur un intervalle de temps. Essentiellement, c'est le temps pris par votre programme pour faire quelque chose divisé par le temps d'intervalle. Par exemple, si votre application prend 2 secondes de temps CPU sur une période de 5 secondes, on peut dire qu'elle utilise 40% de la CPU.

Notez que ce calcul, aussi simple que cela puisse paraître, peut être compliqué lors de l'utilisation d'un système multiprocesseur. Si votre application utilise 7 secondes de temps CPU en 5 secondes d'horloge murale sur un système à deux processeurs, dites-vous qu'elle utilise 140% ou 70% CPU?

Mise à jour: Comme gimel mentionne, la fonction os.times fournit également cette information d'une manière indépendante de la plate-forme. Les notes de calcul ci-dessus s'appliquent toujours, bien sûr.

+0

Le problème que je vois avec ceci est que cela est plus d'une mesure de combien de temps CPU, qui, bien que peut-être utile, je ne pense pas que cela va aider avec ce problème, car je dois savoir que maintenant appX utilise 10% de la capacité totale du processeur. – UnkwnTech

+0

"À l'heure actuelle", chaque processus utilise 100% sur un seul système de processeur - il n'y a qu'un seul processus en cours d'exécution à tout moment, et c'est celui qui demande sa consommation de ressources.Prenez un instantané du rusage chaque seconde, puis calculez la quantité de CPU que vous avez utilisée dans la dernière seconde. –

0

Utilisez time.clock() pour obtenir l'heure du processeur. Pour obtenir le pourcentage d'utilisation du processeur, le temps processeur écoulé/le temps écoulé

Par exemple, si le temps processeur écoulé est de 0,2 et que le temps écoulé est 1, alors l'utilisation du processeur est de 20%.

Remarque: Vous devez diviser par le nombre de processeurs dont vous disposez. Si vous avez 2 à-dire un dual core:

import decimal,timeit 
decimal.getcontext().prec=1000 
def torture(): 
    decimal.Decimal(2).sqrt() 
    time.sleep(0.1) 
import time 
clock=time.clock() 
while 1: 
    clock=timeit.timeit(torture,number=10) 
    tclock=time.clock() 
    print((tclock-clock)*p) 
    clock=tclock 
+4

mais faites attention aux fans de MS, time.clock() est l'heure de l'horloge murale si vous utilisez Windows. voir docs python ici: http://docs.python.org/library/time.html#time.clock – amwinter

12

En utilisant psutil:

>>> import psutil 
>>> p = psutil.Process() 
>>> p.cpu_times() 
cputimes(user=0.06, system=0.03) 
>>> p.cpu_percent(interval=1) 
0.0 
>>> 
Questions connexes