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öserValueErrorom en ogiltig resurs anges, ellererrorom 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_INFINITYkan användas för att begära en obegränsad gräns.Utlöser
ValueErrorom 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_INFINITYnä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, menValueErrorkommer ändå att visas om den begärda gränsen överskrider systemets gräns.setrlimitkan också ge upphov tillerrorom det underliggande systemanropet misslyckas.VxWorks stöder endast inställningen
RLIMIT_NOFILE.Utlöser en auditing event
resource.setrlimitmed 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
ProcessLookupErrornär pid inte kan hittas ochPermissionErrornär användaren inte harCAP_SYS_RESOURCEför processen.Utlöser en auditing event
resource.prlimitmed 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 modulensignalfö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_utimeochru_stimei 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
0ru_utimetid i användarläge (float-sekunder)
1ru_stimetid i systemläge (float-sekunder)
2ru_maxrssmaximal storlek på invånaruppsättning
3ru_ixrssstorlek på delat minne
4ru_idrssstorlek på odelat minne
5ru_isrssodelad stackstorlek
6ru_minfltsidfel som inte kräver I/O
7ru_majfltsidfel som kräver I/O
8ru_nswapantal utbyten
9ru_inblockoperationer för blockinmatning
10ru_oublockblockutmatningsoperationer
11ru_msgsndskickade meddelanden
12ru_msgrcvmottagna meddelanden
13ru_nsignalsmottagna signaler
14ru_nvcswfrivilliga byten av sammanhang
15ru_nivcswofrivilliga kontextbyten
Denna funktion ger upphov till ett
ValueErrorom en ogiltig who-parameter anges. Den kan också ge upphov tillerrorundantag 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.