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.
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öserValueError
om en ogiltig resurs anges, ellererror
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 avRLIM_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 iValueError
. En process med det effektiva UID:et super-user kan begära vilket giltigt gränsvärde som helst, inklusive obegränsat, menValueError
kommer ändå att visas om den begärda gränsen överskrider systemets gräns.setrlimit
kan också ge upphov tillerror
om det underliggande systemanropet misslyckas.VxWorks stöder endast inställningen
RLIMIT_NOFILE
.Utlöser en auditing event
resource.setrlimit
med argumentenresource
,limits
.
- resource.prlimit(pid, resource[, limits])¶
Kombinerar
setrlimit()
ochgetrlimit()
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 isetrlimit()
, 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 ochPermissionError
när användaren inte harCAP_SYS_RESOURCE
för processen.Utlöser en auditing event
resource.prlimit
med argumentenpid
,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 modulensignal
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
ochru_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 tillerror
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.