resource — Resource usage information¶
Цей модуль надає базові механізми для вимірювання та контролю системних ресурсів, що використовуються програмою.
Availability: Unix, not WASI.
Символьні константи використовуються для вказівки певних системних ресурсів і запиту інформації про використання поточного процесу або його дочірніх процесів.
У разі помилки системного виклику виникає OSError.
Обмеження ресурсів¶
Використання ресурсів можна обмежити за допомогою функції setrlimit(), описаної нижче. Кожен ресурс контролюється парою обмежень: м’яким обмеженням і жорстким обмеженням. М’яке обмеження – це поточне обмеження, яке з часом може бути знижено або підвищено процесом. М’яке обмеження ніколи не може перевищувати жорстке обмеження. Жорстке обмеження можна знизити до будь-якого значення, що перевищує м’яке обмеження, але не підняти. (Тільки процеси з ефективним UID суперкористувача можуть підняти жорстке обмеження.)
Конкретні ресурси, які можна обмежити, залежать від системи. Вони описані на сторінці довідки getrlimit(2). Перелічені нижче ресурси підтримуються, якщо їх підтримує базова операційна система; ресурси, які не можуть бути перевірені або контрольовані операційною системою, не визначені в цьому модулі для цих платформ.
- resource.RLIM_INFINITY¶
Константа, яка використовується для позначення обмеження для необмеженого ресурсу.
- resource.getrlimit(resource)¶
Повертає кортеж
(soft, hard)із поточними м’якими та жорсткими обмеженнями ресурсу. ВикликаєValueError, якщо вказано недійсний ресурс, абоerror, якщо основний системний виклик несподівано завершується помилкою.
- resource.setrlimit(resource, limits)¶
Sets new limits of consumption of resource. The limits argument must be a tuple
(soft, hard)of two integers describing the new limits. A value ofRLIM_INFINITYcan be used to request a limit that is unlimited.Raises
ValueErrorif an invalid resource is specified, if the new soft limit exceeds the hard limit, or if a process tries to raise its hard limit. Specifying a limit ofRLIM_INFINITYwhen the hard or system limit for that resource is not unlimited will result in aValueError. A process with the effective UID of super-user can request any valid limit value, including unlimited, butValueErrorwill still be raised if the requested limit exceeds the system imposed limit.setrlimitтакож може викликатиerror, якщо основний системний виклик не вдається.VxWorks only supports setting
RLIMIT_NOFILE.Викликає подію аудиту
resource.setrlimitз аргументамиresource,limits.
- resource.prlimit(pid, resource[, limits])¶
Поєднує
setrlimit()іgetrlimit()в одній функції та підтримує отримання та встановлення обмежень ресурсів довільного процесу. Якщо pid дорівнює 0, тоді виклик застосовується до поточного процесу. resource і limits мають те саме значення, що й уsetrlimit(), за винятком того, що limits є необов’язковим.Якщо limits не задано, функція повертає обмеження resource процесу pid. Коли задано limits, встановлюється обмеження resource для процесу та повертається попередній ліміт ресурсів.
Викликає
ProcessLookupError, коли pid не може бути знайдено, іPermissionError, коли користувач не маєCAP_SYS_RESOURCEдля процесу.Викликає подію аудиту
resource.prlimitз аргументамиpid,resource,limits.Availability: Linux >= 2.6.36 with glibc >= 2.13.
Added in version 3.4.
Ці символи визначають ресурси, споживання яких можна контролювати за допомогою функцій setrlimit() і getrlimit(), описаних нижче. Значення цих символів точно є константами, які використовуються програмами на Сі.
Сторінка довідки Unix для getrlimit(2) містить список доступних ресурсів. Зауважте, що не всі системи використовують один і той самий символ або те саме значення для позначення того самого ресурсу. Цей модуль не намагається маскувати відмінності платформ — символи, не визначені для платформи, не будуть доступні з цього модуля на цій платформі.
- resource.RLIMIT_CORE¶
Максимальний розмір (у байтах) основного файлу, який може створити поточний процес. Це може призвести до створення часткового файлу ядра, якщо для вмісту всього образу процесу знадобиться ядро більшого розміру.
- resource.RLIMIT_CPU¶
The maximum amount of processor time (in seconds) that a process can use. If this limit is exceeded, a
SIGXCPUsignal is sent to the process. (See thesignalmodule documentation for information about how to catch this signal and do something useful, e.g. flush open files to disk.)
- resource.RLIMIT_FSIZE¶
Максимальний розмір файлу, який може створити процес.
- resource.RLIMIT_DATA¶
Максимальний розмір (у байтах) купи процесу.
- resource.RLIMIT_STACK¶
Максимальний розмір (у байтах) стека викликів для поточного процесу. Це впливає лише на стек основного потоку в багатопоточному процесі.
- resource.RLIMIT_RSS¶
Максимальний розмір резидентного набору, який має бути доступним для процесу.
- resource.RLIMIT_NPROC¶
Максимальна кількість процесів, які може створити поточний процес.
- resource.RLIMIT_NOFILE¶
Максимальна кількість відкритих файлових дескрипторів для поточного процесу.
- resource.RLIMIT_OFILE¶
Назва BSD для
RLIMIT_NOFILE.
- resource.RLIMIT_MEMLOCK¶
Максимальний адресний простір, який може бути заблокований у пам’яті.
- resource.RLIMIT_VMEM¶
The largest area of mapped memory which the process may occupy. Usually an alias of
RLIMIT_AS.Availability: Solaris, FreeBSD, NetBSD.
- resource.RLIMIT_AS¶
Максимальна площа (у байтах) адресного простору, яку може зайняти процес.
- resource.RLIMIT_MSGQUEUE¶
Кількість байтів, які можна виділити для черг повідомлень POSIX.
Availability: Linux >= 2.6.8.
Added in version 3.4.
- resource.RLIMIT_NICE¶
Стеля для хорошого рівня процесу (розраховується як 20 - rlim_cur).
Availability: Linux >= 2.6.12.
Added in version 3.4.
- resource.RLIMIT_RTPRIO¶
Стеля пріоритету в реальному часі.
Availability: Linux >= 2.6.12.
Added in version 3.4.
- resource.RLIMIT_RTTIME¶
Обмеження часу (у мікросекундах) процесорного часу, який процес може витрачати в режимі планування в реальному часі без виконання блокуючого системного виклику.
Availability: Linux >= 2.6.25.
Added in version 3.4.
- resource.RLIMIT_SIGPENDING¶
Кількість сигналів, які процес може поставити в чергу.
Availability: Linux >= 2.6.8.
Added in version 3.4.
- resource.RLIMIT_SBSIZE¶
Максимальний розмір (у байтах) використання буфера сокета для цього користувача. Це обмежує обсяг мережевої пам’яті, а отже, і кількість mbuf, які цей користувач може зберігати в будь-який час.
Availability: FreeBSD, NetBSD.
Added in version 3.4.
- resource.RLIMIT_SWAP¶
The maximum size (in bytes) of the swap space that may be reserved or used by all of this user id’s processes. This limit is enforced only if bit 1 of the vm.overcommit sysctl is set. Please see tuning(7) for a complete description of this sysctl.
Availability: FreeBSD >= 8.
Added in version 3.4.
- resource.RLIMIT_NPTS¶
Максимальна кількість псевдотерміналів, створених цим ідентифікатором користувача.
Availability: FreeBSD >= 8.
Added in version 3.4.
- resource.RLIMIT_KQUEUES¶
Максимальна кількість kqueue, яку дозволено створити цьому ідентифікатору користувача.
Availability: FreeBSD >= 11.
Added in version 3.10.
Використання ресурсів¶
Ці функції використовуються для отримання інформації про використання ресурсів:
- resource.getrusage(who)¶
This function returns an object that describes the resources consumed by either the current process or its children, as specified by the who parameter. The who parameter should be specified using one of the
RUSAGE_*constants described below.Простий приклад:
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))
Кожне з полів поверненого значення описує, як використовувався певний системний ресурс, напр. кількість часу, витраченого на роботу, є режимом користувача або кількістю разів, коли процес вивантажувався з основної пам’яті. Деякі значення залежать від внутрішнього такту годинника, напр. обсяг пам’яті, який використовує процес.
Для зворотної сумісності повернуте значення також доступне як кортеж із 16 елементів.
The fields
ru_utimeandru_stimeof the return value are floating-point values representing the amount of time spent executing in user mode and the amount of time spent executing in system mode, respectively. The remaining values are integers. Consult the getrusage(2) man page for detailed information about these values. A brief summary is presented here:Індекс
Поле
Ресурс
0ru_utimeчас у режимі користувача (секунд з плаваючою точкою)
1ru_stimeчас у системному режимі (секунд з плаваючою точкою)
2ru_maxrssмаксимальний розмір резидентного набору
3ru_ixrssрозмір спільної пам’яті
4ru_idrssнерозділений розмір пам’яті
5ru_isrssрозмір стеку без спільного доступу
6ru_minfltпомилки сторінки, які не вимагають введення-виведення
7ru_majfltпомилки сторінки, які вимагають введення-виведення
8ru_nswapкількість обмінів
9ru_inblockоперації введення блоку
10ru_oublockоперації виведення блоків
11ru_msgsndнадісланих повідомлень
12ru_msgrcvотриманих повідомлень
13ru_nsignalsотримані сигнали
14ru_nvcswдобровільні перемикання контексту
15ru_nivcswмимовільні перемикання контексту
Ця функція викличе
ValueError, якщо вказано недійсний параметр who. Він також може викликати винятокerrorза незвичайних обставин.
- resource.getpagesize()¶
Повертає кількість байтів на системній сторінці. (Це необов’язково збігається з апаратним розміром сторінки.)
The following RUSAGE_* symbols are passed to the getrusage()
function to specify which processes information should be provided for.
- resource.RUSAGE_SELF¶
Передайте
getrusage(), щоб запитати ресурси, спожиті процесом виклику, який є сумою ресурсів, використаних усіма потоками в процесі.
- resource.RUSAGE_CHILDREN¶
Перейдіть до
getrusage(), щоб запитати ресурси, споживані дочірніми процесами викликаючого процесу, які були завершені та очікували.
- resource.RUSAGE_BOTH¶
Перейдіть до
getrusage(), щоб запитати ресурси, споживані як поточним процесом, так і дочірніми процесами. Може бути недоступний у всіх системах.
- resource.RUSAGE_THREAD¶
Перейдіть до
getrusage(), щоб запитати ресурси, спожиті поточним потоком. Може бути недоступний у всіх системах.Added in version 3.2.