Ich schreibe ein Python-Skript, das 4K- Videos herunterlädt und auf Anfrage abspielt. Wenn mein Gerätespeicher 7,2 GB überschreitet, wird das Video mit der geringsten Anzahl von Ansichten gelöscht.
Mit dem Befehl free oder top kann ich die Speicherinformationen abrufen. Aber wie kann ich den gesamten Speicher nutzen ? Damit ich dies an die Python-Funktion zurückgeben kann, um es mit dem Speicherschwellenwert zu vergleichen.
psutil
scheint das Python-Modul der richtige Weg zu sein.Antworten:
Prozentsatz des verwendeten Speichers (ohne Puffer und Cache):
Für Ihre Frage haben Sie hinzugefügt: "über 7,2 Gigabyte", aber ich würde annehmen, dass ein Prozentsatz flexibler sein könnte.
Um dies zu erweitern, kann dasselbe für "prozentualen freien Speicher" verwendet werden:
awk
ist ein Muster-Scan-Tool mit vielen Parametern. FNR ist die Nummer des Eingabedatensatzes in der aktuellen Eingabedatei. Grundsätzlich die aktuell verarbeitete Zeile. FNR sucht also nach der 3. Zeile, in der die Zahlen Ihren Wünschen entsprechen. Die $ 3 und $ 4 zeigen auf die 3. und 4. Spalte. Wenn Sie die Nummer selbst möchten, verwenden Sie:Beispiel:
Wenn Sie mit Puffern und Cache wollen: FNR = 2. Wenn Sie tauschen möchten, ist FNR = 4.
quelle
Sie können auch die
free
Informationsquelle lesen/proc/meminfo
:In Python zum Beispiel:
Sie erhalten den freien Speicher in KB in der
free_mem_in_kb
Variablen. Mit etwas Ähnlichem für den Gesamtspeicher können Sie die Werte subtrahieren (oder Puffer addieren, zwischengespeichert usw.).Sie können auch ein Wörterbuch der Werte in der Datei erstellen:
Rufen Sie dann
meminfo['MemAvailable'].value
zum Beispiel die Werte mit ab .quelle
/proc/meminfo
langfristig weniger wahrscheinlich als die vonfree
? Die Wahl scheint zwischen dem Parsen des einen oder anderen zu liegen./proc/meminfo
die den Benutzerraum beschädigen, und seit langer Zeit Benutzern ausgesetzt ist./proc/meminfo
nicht für Menschen gedacht ist (die mit Änderungen in der Ausgabeformatierung umgehen können), sondern für andere Programme (die bei Änderungen möglicherweise nicht funktionieren ). Wie Muru Notes bemühen sich Linux-Kernel-Entwickler, den Benutzerraum nicht mithilfe dokumentierter APIs (von denen / proc / meminfo eine ist) zu unterbrechen . Darüber hinaus besteht das Format für/proc/meminfo
mehr oder weniger Schlüssel-Wert-Paare, sodass das Hinzufügen neuer Felder erfolgen kann, ohne die Abwärtskompatibilität zu beeinträchtigen. Brechende Änderungen könnten immer noch passieren, aber ich denke, sie sind weniger wahrscheinlich als fürfree
.Der Python-Code von muru hat mich fasziniert, ihn in einer Decorator-Klasse zu verwenden, um den Speicherverbrauch einer Funktion zu messen.
Funktion zur Verbrauchsmessung:
Verwendungszweck:
Ausdrucken:
quelle