2014-06-23 13 views
6

Der Code gibt unabhängig von den Intervallwerten immer 0,0 Werte zurück.cpu_percent (Intervall = Keine) gibt unabhängig vom Intervallwert immer 0 zurück. PYTHON

import psutil 
p = psutil.Process() 
print p.cpu_percent(interval=1) 
print p.cpu_percent(interval=None) 
+0

Uhm ich es reproduzieren kann. Es könnte ein Fehler in neueren Versionen von 'psutil' sein. (Ich habe andere Versionen der Bibliothek verwendet und es hat immer gut funktioniert). Beachten Sie, dass ich Werte ungleich Null erhalten konnte, die im aktuellen Prozess verschiedene Threads starten. – Bakuriu

+0

Haben Sie es mit 'psutil.cpu_percent (interval = 1)' wie dokumentiert unter https://code.google.com/p/psutil/wiki/Documentation#CPU versucht? Und ich denke, wenn Sie die Process-Klasse verwenden, müssen Sie eine PID angeben (wie 'p = psutil.Process (os.getpid())'). –

+0

@ChristianBerendt: Ich habe die Dokumentation aus dem gleichen Link gelesen und mehrere PIDs (gültig und ausgeführt), aber ich habe immer 0,0 –

Antwort

0

Aus meinem eigenen Code, der funktioniert:

cpu = psutil.cpu_times_percent(interval=0.4, percpu=False) 
+0

Aber ich muss die CPU-Prozent eines Process-Objekts finden –

2

Dieses Verhalten ist documented:

Wenn Intervall 0.0 oder None ist seit dem letzten Aufruf verstrichen Prozesszeiten System-CPU-Zeiten vergleicht, sofort zurückkehren. Das heißt, beim ersten Aufruf wird ein bedeutungsloser 0.0 Wert zurückgegeben, den Sie ignorieren sollten. In diesem Fall wird für die Genauigkeit empfohlen, dass diese Funktion ein zweites Mal mit mindestens 0.1 Sekunden zwischen den Anrufen aufgerufen wird.

Es gibt auch eine Warnung vor interval=None für einen Anruf mit:

Warnung: das erste Mal dieser Funktion mit Intervall = 0.0 oder None es wird wieder ein bedeutungsloses 0.0 genannt wird Wert, den Sie ignorieren sollten.

Wenn interval=None verwenden, stellen Sie sicher, dass .cpu_percent an einen Aufruf im Vergleich zu nennen.

p = psutil.Process(pid=pid) 
p.cpu_percent(interval=None) 
for i in range(100): 
    usage = p.cpu_percent(interval=None) 
    # do other things 

Statt:

for i in range(100): 
    p = psutil.Process(pid=pid) 
    p.cpu_percent(interval=None) 
    # do other things 
0

die CPU eines Prozessobjektes ist wandelbar. Ich habe ein paar Tests für dich gemacht.

for i in range(10): 
    p = psutil.Process(3301) 
    print p.cpu_percent(interval=0.1) 

Ergebnis: 9.9 0.0 0.0 0.0 0.0 9.9 0.0 9.9 0.0 0.0

Also, wenn Sie die CPU-Prozent eines Prozessobjekt erhalten möchten, können Sie den Durchschnitt in bestimmten Zeit in Anspruch nehmen könnte.

test_list = [] 
for i in range(10): 
    p = psutil.Process(6601) 
    p_cpu = p.cpu_percent(interval=0.1) 
    test_list.append(p_cpu) 
print float(sum(test_list))/len(test_list) 

Ergebnis: 1.98

More info in picture