2016-12-18 1 views
2

Ich versuche, die CPU-Nutzung eines Prozessbaums zu messen.PSUtil: Messung der CPU-Nutzung eines bestimmten Prozesses

Derzeit bekommen die cpu_usage eines Prozesses (ohne Kinder), aber ich bekomme seltsame Ergebnisse.

import psutil 
p = psutil.Process(PID) 
p.cpu_percent 

gibt mir float>100 zurück, wie das überhaupt möglich ist?

btw ist PID die pid von etwas Einfachen wie

def foo(): 
    i = 0 
    while True: 
     i += 1 

die nach Task-Manager seiner CPU-Auslastung ist um 12%

Ich möchte so eine Leistung von 12.5 oder etwas zu bekommen.

Antwort

2

las ich eine Dokumentation über psutil und hier ist, was ich habe:

Hinweis: a percentage> 100 ist legitim, da sie von einem Prozess mit> mehreren Threads laufen auf verschiedenen CPU-Kerne führen kann.

Also, um zu entledigen> 100 Sie etwas tun sollten:

Hinweis: Der Rückgabewert ist explcitly nicht gleichmäßig auf alle CPUs Kerne aufgeteilt (anders psutil.cpu_percent()). Dies bedeutet, dass bei einem Prozess mit ausgelasteter Schleife, der auf einem System mit 2 CPU-Kernen ausgeführt wird, anstelle von 50% eine 100% ige CPU-Auslastung gemeldet wird. Dies wurde durchgeführt, um mit dem "Top" -Dienstprogramm von UNIX konsistent zu sein und um Prozesse mit CPU-Ressourcen zu identifizieren (unabhängig von der Anzahl der CPU-Kerne). Es muss angemerkt werden, dass taskmgr.exe unter Windows im obigen Beispiel eine 50% ige Nutzung meldet. Um das taskmgr.exe-Verhalten von Windows zu emulieren, können Sie Folgendes tun:

p.cpu_percent()/psutil.cpu_count().

Da ich von woanders diese Antwort bekam, werde ich Ihnen einen Link, um es zu überprüfen out: http://psutil.readthedocs.io/en/release-2.2.1/#psutil.Process.cpu_percent

Verwandte Themen