resource — Information om resursanvändning


Denna modul ger grundläggande mekanismer för att mäta och kontrollera systemresurser som används av ett program.

Tillgänglighet: Unix, not WASI.

Symboliska konstanter används för att ange särskilda systemresurser och för att begära användningsinformation om antingen den aktuella processen eller dess barn.

Ett OSError utlöses när syscall misslyckas.

exception resource.error

Ett föråldrat alias för OSError.

Ändrad i version 3.3: Efter PEP 3151 gjordes denna klass till ett alias för OSError.

Begränsningar av resurser

Resursanvändningen kan begränsas med hjälp av funktionen setrlimit() som beskrivs nedan. Varje resurs styrs av ett par gränser: en mjuk gräns och en hård gräns. Den mjuka gränsen är den aktuella gränsen och kan sänkas eller höjas av en process över tiden. Den mjuka gränsen kan aldrig överskrida den hårda gränsen. Den hårda gränsen kan sänkas till ett värde som är större än den mjuka gränsen, men inte höjas. (Endast processer med superanvändarens effektiva UID kan höja en hård gräns)

De specifika resurser som kan begränsas är systemberoende. De beskrivs i getrlimit(2) man page. De resurser som anges nedan stöds när det underliggande operativsystemet stöder dem; resurser som inte kan kontrolleras eller styras av operativsystemet definieras inte i den här modulen för dessa plattformar.

resource.RLIM_INFINITY

Konstnär som används för att representera gränsen för en obegränsad resurs.

resource.getrlimit(resource)

Returnerar en tupel (soft, hard) med de aktuella soft- och hard-gränserna för resource. Utlöser ValueError om en ogiltig resurs anges, eller error om det underliggande systemanropet misslyckas oväntat.

resource.setrlimit(resource, limits)

Sätter nya gränser för förbrukning av resurs. Argumentet limits måste vara en tupel (soft, hard) av två heltal som beskriver de nya gränserna. Ett värde av RLIM_INFINITY kan användas för att begära en obegränsad gräns.

Utlöser ValueError om en ogiltig resurs anges, om den nya mjuka gränsen överskrider den hårda gränsen eller om en process försöker höja sin hårda gräns. Om du anger en gräns på RLIM_INFINITY när den hårda gränsen eller systemgränsen för den resursen inte är obegränsad, resulterar det i ValueError. En process med det effektiva UID:et super-user kan begära vilket giltigt gränsvärde som helst, inklusive obegränsat, men ValueError kommer ändå att visas om den begärda gränsen överskrider systemets gräns.

setrlimit kan också ge upphov till error om det underliggande systemanropet misslyckas.

VxWorks stöder endast inställningen RLIMIT_NOFILE.

Utlöser en auditing event resource.setrlimit med argumenten resource, limits.

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

Kombinerar setrlimit() och getrlimit() i en funktion och stöder hämtning och inställning av resursgränserna för en godtycklig process. Om pid är 0 gäller anropet för den aktuella processen. resource och limits har samma betydelse som i setrlimit(), förutom att limits är valfritt.

När limits inte anges returnerar funktionen resurs*gränsen för processen *pid. När limits anges sätts processens resurs-gräns och den tidigare resursgränsen returneras.

Utlöser ProcessLookupError när pid inte kan hittas och PermissionError när användaren inte har CAP_SYS_RESOURCE för processen.

Utlöser en auditing event resource.prlimit med argumenten pid, resource, limits.

Tillgänglighet: Linux >= 2.6.36 with glibc >= 2.13.

Tillagd i version 3.4.

Dessa symboler definierar resurser vars förbrukning kan kontrolleras med hjälp av funktionerna setrlimit() och getrlimit() som beskrivs nedan. Värdena på dessa symboler är exakt de konstanter som används av C-program.

Unix man page för getrlimit(2) listar de tillgängliga resurserna. Observera att inte alla system använder samma symbol eller samma värde för att beteckna samma resurs. Den här modulen försöker inte maskera plattformsskillnader — symboler som inte är definierade för en plattform kommer inte att vara tillgängliga från den här modulen på den plattformen.

resource.RLIMIT_CORE

Den maximala storleken (i byte) på en core-fil som den aktuella processen kan skapa. Detta kan resultera i att en partiell core-fil skapas om en större core skulle krävas för att innehålla hela processbilden.

resource.RLIMIT_CPU

Den maximala mängden processortid (i sekunder) som en process kan använda. Om denna gräns överskrids skickas en SIGXCPU-signal till processen. (Se dokumentationen för modulen signal för information om hur du kan fånga upp denna signal och göra något användbart, t.ex. spola öppna filer till disken)

resource.RLIMIT_FSIZE

Den maximala storleken på en fil som processen kan skapa.

resource.RLIMIT_DATA

Den maximala storleken (i byte) på processens heap.

resource.RLIMIT_STACK

Den maximala storleken (i byte) på anropsstacken för den aktuella processen. Detta påverkar endast stacken för huvudtråden i en flertrådad process.

resource.RLIMIT_RSS

Den maximala storleken på invånaruppsättningen som ska göras tillgänglig för processen.

resource.RLIMIT_NPROC

Det maximala antalet processer som den aktuella processen får skapa.

resource.RLIMIT_NOFILE

Det maximala antalet öppna filbeskrivare för den aktuella processen.

resource.RLIMIT_OFILE

BSD-namnet för RLIMIT_NOFILE.

resource.RLIMIT_MEMLOCK

Den maximala adressrymd som kan låsas i minnet.

resource.RLIMIT_VMEM

Det största området i det mappade minnet som processen kan uppta.

Tillgänglighet: FreeBSD >= 11.

resource.RLIMIT_AS

Den maximala ytan (i byte) av adressutrymmet som kan tas i anspråk av processen.

resource.RLIMIT_MSGQUEUE

Det antal byte som kan allokeras till POSIX-meddelandeköer.

Tillgänglighet: Linux >= 2.6.8.

Tillagd i version 3.4.

resource.RLIMIT_NICE

Taket för processens fina nivå (beräknas som 20 - rlim_cur).

Tillgänglighet: Linux >= 2.6.12.

Tillagd i version 3.4.

resource.RLIMIT_RTPRIO

Taket för realtidsprioriteringen.

Tillgänglighet: Linux >= 2.6.12.

Tillagd i version 3.4.

resource.RLIMIT_RTTIME

Tidsgränsen (i mikrosekunder) för CPU-tid som en process kan spendera under realtidsschemaläggning utan att göra ett blockerande syscall.

Tillgänglighet: Linux >= 2.6.25.

Tillagd i version 3.4.

resource.RLIMIT_SIGPENDING

Antalet signaler som processen kan ställa i kö.

Tillgänglighet: Linux >= 2.6.8.

Tillagd i version 3.4.

resource.RLIMIT_SBSIZE

Den maximala storleken (i byte) på socketbuffertanvändningen för den här användaren. Detta begränsar mängden nätverksminne, och därmed mängden mbufs, som den här användaren kan ha vid varje tidpunkt.

Tillgänglighet: FreeBSD.

Tillagd i version 3.4.

resource.RLIMIT_SWAP

Den maximala storleken (i byte) på det swaputrymme som kan reserveras eller användas av alla processer i detta användar-id. Denna gräns tillämpas endast om bit 1 i sysctl vm.overcommit är inställd. Se tuning(7) för en fullständig beskrivning av denna sysctl.

Tillgänglighet: FreeBSD.

Tillagd i version 3.4.

resource.RLIMIT_NPTS

Det maximala antalet pseudoterminaler som skapats av detta användar-ID.

Tillgänglighet: FreeBSD.

Tillagd i version 3.4.

resource.RLIMIT_KQUEUES

Det maximala antalet kqueues som detta användar-ID får skapa.

Tillgänglighet: FreeBSD >= 11.

Tillagd i version 3.10.

Användning av resurser

Dessa funktioner används för att hämta information om resursanvändning:

resource.getrusage(who)

Denna funktion returnerar ett objekt som beskriver de resurser som förbrukas av antingen den aktuella processen eller dess barn, enligt parametern who. Parametern who bör specificeras med hjälp av en av RUSAGE_*-konstanterna som beskrivs nedan.

Ett enkelt exempel:

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))

Fälten i returvärdet beskriver var och en hur en viss systemresurs har använts, t.ex. hur lång tid som körts i användarläge eller hur många gånger processen swappats ut ur huvudminnet. Vissa värden är beroende av den interna klockans tick, t.ex. hur mycket minne som processen använder.

För bakåtkompatibilitet är returvärdet också tillgängligt som en tupel med 16 element.

Fälten ru_utime och ru_stime i returvärdet är flyttalsvärden som representerar den tid som spenderats i användarläge respektive systemläge. De återstående värdena är heltal. Mer information om dessa värden finns i getrusage(2) man page. En kort sammanfattning presenteras här:

Index

Fält

Resurs

0

ru_utime

tid i användarläge (float-sekunder)

1

ru_stime

tid i systemläge (float-sekunder)

2

ru_maxrss

maximal storlek på invånaruppsättning

3

ru_ixrss

storlek på delat minne

4

ru_idrss

storlek på odelat minne

5

ru_isrss

odelad stackstorlek

6

ru_minflt

sidfel som inte kräver I/O

7

ru_majflt

sidfel som kräver I/O

8

ru_nswap

antal utbyten

9

ru_inblock

operationer för blockinmatning

10

ru_oublock

blockutmatningsoperationer

11

ru_msgsnd

skickade meddelanden

12

ru_msgrcv

mottagna meddelanden

13

ru_nsignals

mottagna signaler

14

ru_nvcsw

frivilliga byten av sammanhang

15

ru_nivcsw

ofrivilliga kontextbyten

Denna funktion ger upphov till ett ValueError om en ogiltig who-parameter anges. Den kan också ge upphov till error undantag under ovanliga omständigheter.

resource.getpagesize()

Returnerar antalet byte i en systemsida. (Detta behöver inte vara samma som sidstorleken i maskinvaran)

Följande RUSAGE_*-symboler skickas till getrusage()-funktionen för att ange vilka processer som ska få information.

resource.RUSAGE_SELF

Passa till getrusage() för att begära resurser som förbrukas av den anropande processen, vilket är summan av resurser som används av alla trådar i processen.

resource.RUSAGE_CHILDREN

Skicka till getrusage() för att begära resurser som förbrukas av barnprocesser till den anropande processen som har avslutats och väntats på.

resource.RUSAGE_BOTH

Passera till getrusage() för att begära resurser som förbrukas av både den aktuella processen och underordnade processer. Kanske inte tillgänglig på alla system.

resource.RUSAGE_THREAD

Överlämnas till getrusage() för att begära resurser som förbrukas av den aktuella tråden. Kanske inte tillgänglig på alla system.

Tillagd i version 3.2.