2008-11-09 5 views
14

Ist es mir möglich, die Menge der Prozessorauslastung (% des Maximums) zu sehen, die die aktuelle Python-App verwendet?CPU-Auslastung pro Prozess in Python

Szenario: Mein Host erlaubt mir, meine App zu starten, solange sie nicht mehr als X% der CPU-Leistung verbraucht, also möchte ich, dass sie sich selbst im Auge behält und verlangsamt. Wie kann ich also wissen, wie viel CPU die App verwendet?

Zielplattform ist * nix, aber ich möchte es auch auf einem Win-Host tun.

Antwort

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. 

von der (2,5) Manuell:

Zeiten()

Rückkehr ein 5-Tupel von Gleitkommazahlen anzeigt akkumulierten (Prozessor oder eine andere) mal, in Sekunden. Die Elemente sind: Benutzerzeit, Systemzeit, Kinderbenutzerzeit, Kindersystemzeit und vergangene Echtzeit seit einem festen Punkt in der Vergangenheit in dieser Reihenfolge. Siehe die Unix-Handbuchseite mal (2) oder die entsprechende Windows-Plattform-API-Dokumentation. Verfügbarkeit: Macintosh, Unix, Windows.

6

Das resource Modul bietet getrusage, die Ihnen die Informationen, die Sie benötigen, zumindest für Unix-ähnliche Plattformen geben kann.

Beachten Sie, dass die CPU-Auslastung als Prozentsatz immer über ein Zeitintervall gemessen wird. Im Wesentlichen ist es die Zeit, die Ihr Programm benötigt, um etwas durch die Intervallzeit geteilt zu machen.

Wenn Ihre Anwendung z. B. über einen Zeitraum von 5 Sekunden 2 Sekunden CPU-Zeit beansprucht, kann davon ausgegangen werden, dass sie 40% der CPU verwendet.

Beachten Sie, dass diese Berechnung, so einfach wie es scheint, schwierig werden kann, wenn Sie ein Multiprozessorsystem verwenden. Wenn Ihre Anwendung 7 Sekunden CPU-Zeit in 5 Sekunden Wandzeit auf einem Zwei-Prozessor-System verwendet, sagen Sie, dass sie 140% oder 70% CPU verwendet?

Update: Wie gimel erwähnt, die os.times Funktion bietet auch diese Informationen in einer plattformunabhängigen Art und Weise. Die obigen Berechnungshinweise gelten natürlich weiterhin.

+0

Das Problem, das ich mit diesem zu sehen ist, dass dies eher ein Maß dafür, wie viel CPU-Zeit ist, die, obwohl sie sein kann hilfreich, ich denke nicht, dass es mit diesem Problem helfen wird, weil ich wissen muss, dass appX gerade 10% der gesamten CPU-Kapazität verwendet. – UnkwnTech

+0

"Jetzt gerade", jeder Prozess verwendet 100% auf einem einzigen Prozessor-System - es gibt nur einen Prozess zu jedem Zeitpunkt ausgeführt, und es ist derjenige für seinen Ressourcenverbrauch.Machen Sie jede Sekunde einen Schnappschuss der Raserei und berechnen Sie dann, wie viel CPU Sie in der letzten Sekunde verbraucht haben. –

0

Verwenden Sie time.clock(), um die CPU-Zeit zu erhalten. Um den Prozentsatz der CPU-Auslastung zu erhalten, ist CPU-Zeit abgelaufen/Zeit abgelaufen

Zum Beispiel, wenn CPU-Zeit abgelaufen ist 0,2 und Zeit abgelaufen ist 1 dann ist die CPU-Auslastung 20%.

Hinweis: Sie müssen nach Anzahl der Prozessoren dividieren, die Sie haben. Wenn Sie 2, dh eine Dual-Core haben:

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

aber aufgepasst MS Fans, time.clock() ist Wanduhrzeit, wenn Sie Windows verwenden. Python-Dokumente finden Sie hier: http://docs.python.org/library/time.html#time.clock – amwinter

12

Durch die Verwendung von psutil:

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