resource — Informationen zur Ressourcennutzung


Dieses Modul stellt grundlegende Mechanismen zur Messung und Steuerung der von einem Programm genutzten Systemressourcen bereit.

Verfügbarkeit: Unix, nicht WASI.

Symbolische Konstanten werden verwendet, um bestimmte Systemressourcen zu spezifizieren und Nutzungsinformationen entweder über den aktuellen Prozess oder seine Kindprozesse anzufordern.

Ein OSError wird bei einem Fehler des Systemaufrufs ausgelöst.

exception resource.error

Ein veralteter Alias für OSError.

Geändert in Version 3.3: Nach PEP 3151 wurde diese Klasse zu einem Alias von OSError gemacht.

Ressourcenlimits

Die Ressourcennutzung kann mit der unten beschriebenen Funktion setrlimit() begrenzt werden. Jede Ressource wird durch ein Paar von Limits kontrolliert: ein Soft-Limit und ein Hard-Limit. Das Soft-Limit ist das aktuelle Limit und kann von einem Prozess im Laufe der Zeit gesenkt oder erhöht werden. Das Soft-Limit darf nie das Hard-Limit überschreiten. Das Hard-Limit kann auf jeden Wert gesenkt werden, der größer als das Soft-Limit ist, aber nicht erhöht werden. (Nur Prozesse mit der effektiven UID des Superusers können ein Hard-Limit erhöhen.)

Die spezifischen Ressourcen, die begrenzt werden können, sind systemabhängig. Sie sind in der getrlimit(2) Manpage beschrieben. Die unten aufgeführten Ressourcen werden unterstützt, wenn das zugrunde liegende Betriebssystem sie unterstützt; Ressourcen, die vom Betriebssystem nicht überprüft oder gesteuert werden können, sind auf diesen Plattformen in diesem Modul nicht definiert.

resource.RLIM_INFINITY

Konstante, die verwendet wird, um das Limit für eine unbegrenzte Ressource darzustellen.

resource.getrlimit(resource)

Gibt ein Tupel (soft, hard) mit den aktuellen Soft- und Hard-Limits für resource zurück. Löst ValueError aus, wenn eine ungültige Ressource angegeben wird, oder error, wenn der zugrunde liegende Systemaufruf unerwartet fehlschlägt.

resource.setrlimit(resource, limits)

Setzt neue Limits für den Verbrauch von resource. Das Argument limits muss ein Tupel (soft, hard) aus zwei Ganzzahlen sein, die die neuen Limits beschreiben. Der Wert RLIM_INFINITY kann verwendet werden, um ein unbegrenztes Limit anzufordern.

Löst ValueError aus, wenn eine ungültige Ressource angegeben wird, das neue Soft-Limit das Hard-Limit überschreitet oder ein Prozess versucht, sein Hard-Limit zu erhöhen. Die Angabe eines Limits von RLIM_INFINITY, wenn das Hard- oder Systemlimit für diese Ressource nicht unbegrenzt ist, führt zu einem ValueError. Ein Prozess mit der effektiven UID eines Superusers kann jeden gültigen Limitwert anfordern, einschließlich unbegrenzt, aber ValueError wird trotzdem ausgelöst, wenn das angeforderte Limit das vom System auferlegte Limit überschreitet.

setrlimit kann auch error auslösen, wenn der zugrunde liegende Systemaufruf fehlschlägt.

VxWorks unterstützt nur das Setzen von RLIMIT_NOFILE.

Löst ein Auditing-Event resource.setrlimit mit den Argumenten resource, limits aus.

resource.prlimit(pid, resource[, limits])

Kombiniert setrlimit() und getrlimit() in einer Funktion und unterstützt das Abrufen und Setzen der Ressourcenlimits eines beliebigen Prozesses. Wenn pid 0 ist, dann gilt der Aufruf für den aktuellen Prozess. resource und limits haben dieselbe Bedeutung wie in setrlimit(), mit der Ausnahme, dass limits optional ist.

Wenn limits nicht angegeben ist, gibt die Funktion das resource-Limit des Prozesses pid zurück. Wenn limits angegeben ist, wird das resource-Limit des Prozesses gesetzt und das frühere Ressourcenlimit zurückgegeben.

Löst ProcessLookupError aus, wenn pid nicht gefunden werden kann, und PermissionError, wenn der Benutzer nicht über CAP_SYS_RESOURCE für den Prozess verfügt.

Löst ein Auditing-Event resource.prlimit mit den Argumenten pid, resource, limits aus.

Verfügbarkeit: Linux >= 2.6.36 mit glibc >= 2.13.

Hinzugefügt in Version 3.4.

Diese Symbole definieren Ressourcen, deren Verbrauch mit den unten beschriebenen Funktionen setrlimit() und getrlimit() gesteuert werden kann. Die Werte dieser Symbole sind exakt die Konstanten, die von C-Programmen verwendet werden.

Die Unix-Manpage für getrlimit(2) listet die verfügbaren Ressourcen auf. Beachten Sie, dass nicht alle Systeme dasselbe Symbol oder denselben Wert verwenden, um dieselbe Ressource zu bezeichnen. Dieses Modul versucht nicht, Plattformunterschiede zu maskieren — Symbole, die für eine Plattform nicht definiert sind, sind auf dieser Plattform nicht aus diesem Modul verfügbar.

resource.RLIMIT_CORE

Die maximale Größe (in Bytes) einer Core-Datei, die der aktuelle Prozess erstellen kann. Dies kann zur Erstellung einer teilweisen Core-Datei führen, wenn ein größerer Core erforderlich wäre, um das gesamte Prozessabbild zu enthalten.

resource.RLIMIT_CPU

Die maximale Prozesszeit (in Sekunden), die ein Prozess verbrauchen darf. Wenn dieses Limit überschritten wird, wird ein SIGXCPU Signal an den Prozess gesendet. (Siehe die Dokumentation des Moduls signal für Informationen, wie dieses Signal abgefangen und nützliche Aktionen ausgeführt werden können, z. B. das Leeren offener Dateien auf die Festplatte.)

resource.RLIMIT_FSIZE

Die maximale Größe einer Datei, die der Prozess erstellen darf.

resource.RLIMIT_DATA

Die maximale Größe (in Bytes) des Heaps des Prozesses.

resource.RLIMIT_STACK

Die maximale Größe (in Bytes) des Aufrufstapels für den aktuellen Prozess. Dies betrifft nur den Stapel des Hauptthreads in einem Multithread-Prozess.

resource.RLIMIT_RSS

Die maximale resident set size, die dem Prozess zur Verfügung gestellt werden sollte.

resource.RLIMIT_NPROC

Die maximale Anzahl von Prozessen, die der aktuelle Prozess erstellen darf.

resource.RLIMIT_NOFILE

Die maximale Anzahl von offenen Dateideskriptoren für den aktuellen Prozess.

resource.RLIMIT_OFILE

Der BSD-Name für RLIMIT_NOFILE.

resource.RLIMIT_MEMLOCK

Der maximale Adressraum, der im Speicher gesperrt werden darf.

resource.RLIMIT_VMEM

Der größte Bereich des abgebildeten Speichers, den der Prozess belegen darf. Normalerweise ein Alias für RLIMIT_AS.

Verfügbarkeit: Solaris, FreeBSD, NetBSD.

resource.RLIMIT_AS

Die maximale Fläche (in Bytes) des Adressraums, die vom Prozess belegt werden darf.

resource.RLIMIT_MSGQUEUE

Die Anzahl der Bytes, die für POSIX-Nachrichtenwarteschlangen zugewiesen werden können.

Verfügbarkeit: Linux >= 2.6.8.

Hinzugefügt in Version 3.4.

resource.RLIMIT_NICE

Die Obergrenze für die Nice-Stufe des Prozesses (berechnet als 20 - rlim_cur).

Verfügbarkeit: Linux >= 2.6.12.

Hinzugefügt in Version 3.4.

resource.RLIMIT_RTPRIO

Die Obergrenze der Echtzeitpriorität.

Verfügbarkeit: Linux >= 2.6.12.

Hinzugefügt in Version 3.4.

resource.RLIMIT_RTTIME

Die Zeitgrenze (in Mikrosekunden) für CPU-Zeit, die ein Prozess unter Echtzeitplanung verbringen kann, ohne einen blockierenden Systemaufruf auszuführen.

Verfügbarkeit: Linux >= 2.6.25.

Hinzugefügt in Version 3.4.

resource.RLIMIT_SIGPENDING

Die Anzahl der Signale, die der Prozess in die Warteschlange stellen kann.

Verfügbarkeit: Linux >= 2.6.8.

Hinzugefügt in Version 3.4.

resource.RLIMIT_SBSIZE

Die maximale Größe (in Bytes) der Socket-Puffer-Nutzung für diesen Benutzer. Dies begrenzt die Menge an Netzwerkspeicher und damit die Menge an mbufs, die dieser Benutzer jederzeit halten darf.

Verfügbarkeit: FreeBSD, NetBSD.

Hinzugefügt in Version 3.4.

resource.RLIMIT_SWAP

Die maximale Größe (in Bytes) des Swap-Speichers, der von allen Prozessen dieser Benutzer-ID reserviert oder verwendet werden darf. Dieses Limit wird nur erzwungen, wenn Bit 1 des vm.overcommit sysctl gesetzt ist. Bitte siehe tuning(7) für eine vollständige Beschreibung dieses sysctl.

Verfügbarkeit: FreeBSD >= 8.

Hinzugefügt in Version 3.4.

resource.RLIMIT_NPTS

Die maximale Anzahl von Pseudo-Terminals, die von dieser Benutzer-ID erstellt werden.

Verfügbarkeit: FreeBSD >= 8.

Hinzugefügt in Version 3.4.

resource.RLIMIT_KQUEUES

Die maximale Anzahl von Kqueues, die diese Benutzer-ID erstellen darf.

Verfügbarkeit: FreeBSD >= 11.

Hinzugefügt in Version 3.10.

Ressourcennutzung

Diese Funktionen werden verwendet, um Informationen über die Ressourcennutzung abzurufen.

resource.getrusage(who)

Diese Funktion gibt ein Objekt zurück, das die vom aufrufenden Prozess oder seinen Kindern verbrauchten Ressourcen beschreibt, wie durch den Parameter who angegeben. Der Parameter who sollte unter Verwendung einer der unten beschriebenen Konstanten RUSAGE_* spezifiziert werden.

Ein einfaches Beispiel

from resource import *
import time

# a non CPU-bound task
time.sleep(3)
print(getrusage(RUSAGE_SELF))

# a CPU-bound task
for i in range(10 ** 8):
   _ = 1 + 1
print(getrusage(RUSAGE_SELF))

Die Felder des Rückgabewerts beschreiben jeweils die Nutzung einer bestimmten Systemressource, z. B. die Zeit, die im Benutzermodus verbracht wurde, oder wie oft der Prozess aus dem Hauptspeicher ausgetauscht wurde. Einige Werte sind vom Takt-Tick-Internum abhängig, z. B. die Menge des Speichers, den der Prozess nutzt.

Aus Kompatibilitätsgründen ist der Rückgabewert auch als Tupel mit 16 Elementen zugänglich.

Die Felder ru_utime und ru_stime des Rückgabewerts sind Gleitkommazahlen, die die im Benutzermodus verbrachte Ausführungszeit bzw. die im Systemmodus verbrachte Ausführungszeit darstellen. Die übrigen Werte sind Ganzzahlen. Detaillierte Informationen zu diesen Werten finden Sie in der Manpage getrusage(2). Eine kurze Zusammenfassung wird hier präsentiert.

Index

Feld

Ressource

0

ru_utime

Zeit im Benutzermodus (Float-Sekunden)

1

ru_stime

Zeit im Systemmodus (Float-Sekunden)

2

ru_maxrss

maximale resident set size

3

ru_ixrss

gemeinsam genutzter Speicherplatz

4

ru_idrss

nicht gemeinsam genutzter Speicherplatz

5

ru_isrss

nicht gemeinsam genutzte Stapelgröße

6

ru_minflt

Seitenfehler, die keine I/O erfordern

7

ru_majflt

Seitenfehler, die I/O erfordern

8

ru_nswap

Anzahl der Swap-Auslagerungen

9

ru_inblock

Block-Eingabeoperationen

10

ru_oublock

Block-Ausgabeoperationen

11

ru_msgsnd

gesendete Nachrichten

12

ru_msgrcv

empfangene Nachrichten

13

ru_nsignals

empfangene Signale

14

ru_nvcsw

freiwillige Kontextwechsel

15

ru_nivcsw

unfreiwillige Kontextwechsel

Diese Funktion löst eine ValueError aus, wenn ein ungültiger who-Parameter angegeben wird. Sie kann unter ungewöhnlichen Umständen auch eine error-Ausnahme auslösen.

resource.getpagesize()

Gibt die Anzahl der Bytes in einer Systemseite zurück. (Dies muss nicht mit der Seitengröße der Hardware übereinstimmen.)

Die folgenden RUSAGE_*-Symbole werden an die Funktion getrusage() übergeben, um anzugeben, für welche Prozesse Informationen bereitgestellt werden sollen.

resource.RUSAGE_SELF

An getrusage() übergeben, um Ressourcen anzufordern, die vom aufrufenden Prozess verbraucht wurden, was die Summe der von allen Threads im Prozess verbrauchten Ressourcen ist.

resource.RUSAGE_CHILDREN

An getrusage() übergeben, um Ressourcen anzufordern, die von Kindprozessen des aufrufenden Prozesses verbraucht wurden, die beendet und auf die gewartet wurde.

resource.RUSAGE_BOTH

An getrusage() übergeben, um Ressourcen anzufordern, die sowohl vom aktuellen Prozess als auch von Kindprozessen verbraucht wurden. Möglicherweise nicht auf allen Systemen verfügbar.

resource.RUSAGE_THREAD

An getrusage() übergeben, um Ressourcen anzufordern, die vom aktuellen Thread verbraucht wurden. Möglicherweise nicht auf allen Systemen verfügbar.

Hinzugefügt in Version 3.2.