2014-06-23 19 views
6

Il codice restituisce sempre 0,0 valori, indipendentemente dai valori di intervallo.cpu_percent (intervallo = Nessuno) restituisce sempre 0 indipendentemente dal valore dell'intervallo PYTHON

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

Uhm posso riprodurlo. Potrebbe essere un bug nelle versioni più recenti di 'psutil'. (Ho usato altre versioni della libreria e ha sempre funzionato bene). Si noti che è possibile ottenere valori diversi da zero che iniziano diversi thread nel processo corrente. – Bakuriu

+0

Hai provato con 'psutil.cpu_percent (interval = 1)' come documentato su https://code.google.com/p/psutil/wiki/Documentation#CPU? E penso che quando si usa la classe Process si debba specificare un PID (come 'p = psutil.Process (os.getpid())'). –

+0

@ChristianBerendt: ho letto la documentazione dallo stesso link e specificato diversi PID (validi e in esecuzione), ma ho sempre ottenuto 0.0 –

risposta

0

Dal mio proprio codice che funziona:

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

Ma ho bisogno di trovare la percentuale della CPU di un oggetto Processo –

2

Questo comportamento è documented:

Quando intervallo è 0.0 o None confronta i tempi di processo ai tempi di CPU sistema trascorsi da ultima chiamata, tornando immediatamente. Ciò significa che la prima volta che viene chiamato restituirà un valore senza significato 0.0 che dovresti ignorare. In questo caso si raccomanda per precisione che questa funzione venga chiamata una seconda volta con almeno 0.1 secondi tra una chiamata e l'altra.

C'è anche un'avvertenza contro interval=None per una singola chiamata:

Attenzione: la prima volta che questa funzione viene chiamata con intervallo = 0.0 o None verrà restituito un insignificante 0.0 valore che dovresti ignorare.

Se si utilizza interval=None, assicurarsi di chiamare .cpu_percent rispetto ad una precedente chiamata.

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

anziché:

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

La CPU di un oggetto processo è mutevole. Ho fatto alcuni test per te.

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

risultato: 9.9 0.0 0.0 0.0 0.0 9.9 0.0 9.9 0.0 0.0

Quindi, se si vuole ottenere la percentuale di CPU di un oggetto di processo, si potrebbe prendere la media di tempo determinato.

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) 

risultato: 1.98

More info in picture

Problemi correlati