Was ist Ihre bevorzugte Methode, um den aktuellen Systemstatus (aktuelle CPU, RAM, freier Speicherplatz usw.) in Python abzurufen? Bonuspunkte für * nix- und Windows-Plattformen.
Es scheint einige Möglichkeiten zu geben, dies aus meiner Suche zu extrahieren:
Verwenden einer Bibliothek wie PSI (die derzeit nicht aktiv entwickelt zu sein scheint und auf mehreren Plattformen nicht unterstützt wird) oder so etwas wie pystatgrab (wieder keine Aktivität seit 2007 und keine Unterstützung für Windows).
Verwenden von plattformspezifischem Code, z. B. Verwenden von a
os.popen("ps")
oder ähnlichem für die * nix-Systeme undMEMORYSTATUS
inctypes.windll.kernel32
(siehe dieses Rezept in ActiveState ) für die Windows-Plattform. Man könnte eine Python-Klasse mit all diesen Codefragmenten zusammenstellen.
Es ist nicht so, dass diese Methoden schlecht sind, aber gibt es bereits eine gut unterstützte, plattformübergreifende Möglichkeit, dasselbe zu tun?
Antworten:
Die psutil-Bibliothek bietet Ihnen einige Systeminformationen (CPU- / Speicherauslastung) auf verschiedenen Plattformen:
UPDATE: Hier sind einige Anwendungsbeispiele von
psutil
:quelle
$ pip install psutil
;>>> import psutil; psutil.cpu_percent()
und>>> psutil.virtual_memory()
das gibt ein schönes vmem Objekt zurück:vmem(total=8589934592L, available=4073336832L, percent=52.6, used=5022085120L, free=3560255488L, active=2817949696L, inactive=513081344L, wired=1691054080L)
Verwenden Sie die Psutil-Bibliothek . Unter Ubuntu 18.04 installierte pip 5.5.0 (neueste Version) vom 30.01.2019. Ältere Versionen verhalten sich möglicherweise etwas anders. Sie können Ihre Version von psutil überprüfen, indem Sie dies in Python tun:
So erhalten Sie einige Speicher- und CPU-Statistiken:
Das
virtual_memory
(Tupel) hat den prozentualen Speicher, der systemweit verwendet wird. Dies schien für mich unter Ubuntu 18.04 um einige Prozent überschätzt zu werden.Sie können auch den von der aktuellen Python-Instanz verwendeten Speicher abrufen:
Dies gibt die aktuelle Speichernutzung Ihres Python-Skripts an.
Auf der Pypi-Seite für Psutil finden Sie einige ausführlichere Beispiele .
quelle
Nur für Linux: Einzeiler für die RAM-Nutzung mit nur stdlib-Abhängigkeit:
Bearbeiten: Angegebene Abhängigkeit des Lösungsbetriebssystems
quelle
os.popen('free -th').readlines()[-1].split()[1:]
. Beachten Sie, dass diese Zeile eine Liste von Zeichenfolgen zurückgibt.python:3.8-slim-buster
hat nichtfree
Unten Codes, ohne externe Bibliotheken für mich gearbeitet. Ich habe bei Python 2.7.9 getestet
CPU auslastung
Und Ram-Nutzung, insgesamt, gebraucht und kostenlos
quelle
grep
undawk
würden besser betreut von String - Verarbeitung in Python?Hier ist etwas, das ich vor einiger Zeit zusammengestellt habe: Es sind nur Fenster, aber es kann Ihnen helfen, einen Teil dessen zu erledigen, was Sie tun müssen.
Abgeleitet von: "for sys available mem" http://msdn2.microsoft.com/en-us/library/aa455130.aspx
"Beispiele für einzelne Prozessinformationen und Python-Skripte" http://www.microsoft.com/technet/scriptcenter/scripts/default.mspx?mfr=true
HINWEIS: Die WMI-Schnittstelle / der WMI-Prozess ist auch für die Ausführung ähnlicher Aufgaben verfügbar. Ich verwende sie hier nicht, da die aktuelle Methode meine Anforderungen abdeckt. Wenn sie jedoch eines Tages erweitert oder verbessert werden muss, sollten Sie möglicherweise die verfügbaren WMI-Tools untersuchen .
WMI für Python:
http://tgolden.sc.sabren.com/python/wmi.html
Der Code:
http://monkut.webfactional.com/blog/archive/2009/1/21/windows-process-memory-logging-python
quelle
from x import *
Aussagen vermeiden ! Sie überladen den Hauptnamensraum und überschreiben andere Funktionen und Variablen.Wir haben uns dafür entschieden, die übliche Informationsquelle zu verwenden, da wir sofortige Schwankungen im freien Speicher feststellen konnten und das Gefühl hatten, die Meminfo abzufragen es für hilfreich hielt, Datenquelle . Dies hat uns auch geholfen, einige weitere verwandte Parameter zu erhalten, die vorab analysiert wurden.
Code
Ausgabe als Referenz (wir haben alle Zeilenumbrüche für die weitere Analyse entfernt)
quelle
Ich fühle mich wie diese Antworten für Python geschrieben wurden 2, und in jeder gemacht Erwähnung Fall keiner der Standard -
resource
Paket , das für Python verfügbar ist 3. Es enthält Befehle zum Erhalt der Ressourcengrenzen eines bestimmten Prozesses (der Aufruf Python - Prozess Standard). Dies ist nicht das gleiche wie die aktuelle immer Nutzung von Ressourcen durch das System als Ganzes, aber es könnte einige der gleichen Probleme wie zB lösen „Ich möchte sicherstellen, verwende ich nur X viel RAM mit diesem Skript.“quelle
"... aktueller Systemstatus (aktuelle CPU, RAM, freier Speicherplatz usw.)" Und "* nix- und Windows-Plattformen" können eine schwierige Kombination sein.
Die Betriebssysteme unterscheiden sich grundlegend in der Art und Weise, wie sie diese Ressourcen verwalten. In der Tat unterscheiden sie sich in Kernkonzepten wie der Definition, was als System und was als Anwendungszeit zählt.
"Freier Speicherplatz"? Was zählt als "Speicherplatz"? Alle Partitionen aller Geräte? Was ist mit fremden Partitionen in einer Multi-Boot-Umgebung?
Ich glaube nicht, dass es einen hinreichend klaren Konsens zwischen Windows und * nix gibt, der dies ermöglicht. In der Tat besteht möglicherweise nicht einmal ein Konsens zwischen den verschiedenen Betriebssystemen, die als Windows bezeichnet werden. Gibt es eine einzige Windows-API, die sowohl für XP als auch für Vista funktioniert?
quelle
df -h
beantwortet die Frage "Speicherplatz" sowohl unter Windows als auch unter * nix.Dieses Skript für die CPU-Auslastung:
quelle
Verwenden Sie für CPU-Details die psutil- Bibliothek
Verwenden Sie für die RAM-Frequenz (in MHz) den eingebauten Linux-Bibliotheks- Dmidecode und manipulieren Sie die Ausgabe ein wenig;). Dieser Befehl benötigt eine Root-Berechtigung, daher geben Sie auch Ihr Passwort ein. Kopieren Sie einfach den folgenden Befehl und ersetzen Sie mypass durch Ihr Passwort
[i for i in os.popen("echo mypass | sudo -S dmidecode -t memory | grep 'Clock Speed' | cut -d ':' -f2").read().split(' ') if i.isdigit()]
quelle
Um eine zeilenweise Speicher- und Zeitanalyse Ihres Programms zu erhalten, empfehle ich die Verwendung von
memory_profiler
undline_profiler
.Installation:
Der gemeinsame Teil ist, dass Sie mithilfe der jeweiligen Dekoratoren angeben, welche Funktion Sie analysieren möchten.
Beispiel: Ich habe mehrere Funktionen in meiner Python-Datei
main.py
, die ich analysieren möchte. Einer von ihnen istlinearRegressionfit()
. Ich muss den Dekorator verwenden@profile
, der mir hilft, den Code in Bezug auf beides zu profilieren: Zeit und Speicher.Nehmen Sie die folgenden Änderungen an der Funktionsdefinition vor
Für Zeit Profilieren ,
Lauf:
Ausgabe
Für Speicher Profilieren ,
Lauf:
Ausgabe
Außerdem können die Ergebnisse des Speicherprofilers mithilfe von
matplotlib
verwendet werdenHinweis: Getestet am
line_profiler
version == 3.0.2memory_profiler
version == 0.57.0psutil
version == 5.7.0quelle
Sie können psutil oder psmem mit Beispielprozess-Untercode verwenden
Referenz http://techarena51.com/index.php/how-to-install-python-3-and-flask-on-linux/
https://github.com/Leo-g/python-flask-cmd
quelle
Basierend auf dem CPU-Verwendungscode von @Hrabal verwende ich Folgendes:
quelle
Ich glaube nicht, dass es eine gut unterstützte Multi-Plattform-Bibliothek gibt. Denken Sie daran, dass Python selbst in C geschrieben ist, sodass jede Bibliothek einfach eine kluge Entscheidung darüber treffen wird, welches betriebssystemspezifische Code-Snippet ausgeführt werden soll, wie Sie oben vorgeschlagen haben.
quelle