Содержание страницы
resource – сведения об использовании ресурсов¶resource – Resource usage information
Этот модуль предоставляет базовые механизмы для измерения и контроля системных ресурсов, используемых программой.
Символические константы используются для указания конкретных системных ресурсов и запроса информации об их использовании текущим процессом или его потомками.
OSError возбуждается при сбое системного вызова.
Ограничения ресурсов¶Resource Limits
Использование ресурсов можно ограничить с помощью функции setrlimit(), описанной ниже. Каждый ресурс управляется парой лимитов: мягким и жёстким. Мягкий лимит – это текущий лимит, и процесс со временем может его понижать или повышать. Мягкий лимит никогда не может превышать жёсткий. Жёсткий лимит можно понизить до любого значения, большего мягкого, но нельзя повысить. (Повысить жёсткий лимит могут только процессы с эффективным UID суперпользователя.)
Конкретные ресурсы, которые можно ограничивать, зависят от системы. Они описаны на странице руководства getrlimit(2). Ресурсы, перечисленные ниже, поддерживаются, если их поддерживает базовая операционная система; ресурсы, которые не могут быть проверены или управляться операционной системой, не определены в этом модуле для таких платформ.
-
resource.RLIM_INFINITY¶ Константа, используемая для обозначения неограниченного лимита ресурса.
-
resource.getrlimit(resource)¶ Возвращает кортеж
(soft, hard)с текущими мягким и жёстким лимитами для resource. ВозбуждаетValueError, если указан недопустимый ресурс, илиerror, если базовый системный вызов неожиданно завершился ошибкой.
-
resource.setrlimit(resource, limits)¶ Устанавливает новые лимиты потребления для resource. Аргумент limits должен быть кортежем
(soft, hard)из двух целых чисел, описывающих новые лимиты. ЗначениеRLIM_INFINITYможно использовать для запроса неограниченного лимита.Возбуждает
ValueError, если указан недопустимый ресурс, новый мягкий лимит превышает жёсткий или процесс пытается повысить свой жёсткий лимит. Указание лимитаRLIM_INFINITY, когда жёсткий или системный лимит для этого ресурса не является неограниченным, приведёт кValueError. Процесс с эффективным UID суперпользователя может запрашивать любое допустимое значение лимита, включая неограниченное, ноValueErrorвсё равно будет возбуждено, если запрошенный лимит превышает установленный системой.setrlimitтакже может возбуждатьerror, если базовый системный вызов завершается ошибкой.
-
resource.prlimit(pid, resource[, limits])¶ Объединяет
setrlimit()иgetrlimit()в одну функцию и позволяет получать и устанавливать ограничения ресурсов произвольного процесса. Если pid равен 0, вызов применяется к текущему процессу. resource и limits имеют то же значение, что и вsetrlimit(), за исключением того, что limits является необязательным.Если limits не указан, функция возвращает лимит resource процесса pid. Если limits указан, лимит resource процесса устанавливается, и возвращается предыдущий лимит ресурса.
Возбуждает
ProcessLookupError, если pid не найден, иPermissionError, если у пользователя нетCAP_SYS_RESOURCEдля процесса.Доступность: Linux 2.6.36 или новее с glibc 2.13 или новее.
Новое в версии 3.4.
Эти символы определяют ресурсы, потребление которых можно контролировать с помощью функций setrlimit() и getrlimit(), описанных ниже. Значения этих символов в точности соответствуют константам, используемым в программах на C.
Страница руководства Unix getrlimit(2) перечисляет доступные ресурсы. Обратите внимание, что не все системы используют один и тот же символ или значение для обозначения одного и того же ресурса. Этот модуль не пытается скрыть различия между платформами – символы, не определённые для платформы, не будут доступны из этого модуля на этой платформе.
-
resource.RLIMIT_CORE¶ Максимальный размер (в байтах) файла ядра (core), который может создать текущий процесс. Это может привести к созданию частичного файла ядра, если для размещения всего образа процесса потребовался бы больший файл.
-
resource.RLIMIT_CPU¶ Максимальное количество процессорного времени (в секундах), которое может использовать процесс. Если этот лимит превышен, процессу отправляется сигнал
SIGXCPU. (См. документацию модуляsignalдля получения информации о том, как перехватить этот сигнал и сделать что-то полезное, например, сбросить открытые файлы на диск.)
-
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¶ Наибольшая область отображённой памяти, которую может занимать процесс.
-
resource.RLIMIT_AS¶ Максимальная область (в байтах) адресного пространства, которую может занять процесс.
-
resource.RLIMIT_MSGQUEUE¶ Количество байтов, которое может быть выделено для очередей сообщений POSIX.
Доступность: Linux 2.6.8 или новее.
Новое в версии 3.4.
-
resource.RLIMIT_NICE¶ Верхний предел для значения nice процесса (вычисляется как 20 - rlim_cur).
Доступность: Linux 2.6.12 или новее.
Новое в версии 3.4.
-
resource.RLIMIT_RTPRIO¶ Верхний предел приоритета реального времени.
Доступность: Linux 2.6.12 или новее.
Новое в версии 3.4.
-
resource.RLIMIT_RTTIME¶ Лимит времени (в микросекундах) процессорного времени, которое процесс может потратить в режиме планирования реального времени без выполнения блокирующего системного вызова.
Доступность: Linux 2.6.25 или новее.
Новое в версии 3.4.
-
resource.RLIMIT_SIGPENDING¶ Количество сигналов, которое процесс может поставить в очередь.
Доступность: Linux 2.6.8 или новее.
Новое в версии 3.4.
-
resource.RLIMIT_SBSIZE¶ Максимальный размер (в байтах) буфера сокета для данного пользователя. Это ограничивает объём сетевой памяти и, следовательно, количество mbuf-буферов, которыми этот пользователь может одновременно располагать.
Доступность: FreeBSD 9 или новее.
Новое в версии 3.4.
-
resource.RLIMIT_SWAP¶ Максимальный размер (в байтах) пространства подкачки, которое может быть зарезервировано или использовано всеми процессами данного идентификатора пользователя. Это ограничение действует только если установлен бит 1 sysctl vm.overcommit. Полное описание этого sysctl см. на странице tuning(7).
Доступность: FreeBSD 9 или новее.
Новое в версии 3.4.
-
resource.RLIMIT_NPTS¶ Максимальное количество псевдотерминалов, созданных данным идентификатором пользователя.
Доступность: FreeBSD 9 или новее.
Новое в версии 3.4.
Использование ресурсов¶Resource Usage
Эти функции используются для получения информации об использовании ресурсов:
-
resource.getrusage(who)¶ Эта функция возвращает объект, описывающий ресурсы, потребляемые либо текущим процессом, либо его потомками, в зависимости от параметра who. Параметр who должен быть задан с помощью одной из констант
RUSAGE_*, описанных ниже.Поля возвращаемого значения описывают, как использовался определённый системный ресурс, например, время работы в пользовательском режиме или количество вытеснений процесса из основной памяти. Некоторые значения зависят от внутреннего тактового сигнала (clock tick), например, объём памяти, используемый процессом.
Для обратной совместимости возвращаемое значение также доступно в виде кортежа из 16 элементов.
Поля
ru_utimeиru_stimeвозвращаемого значения – это числа с плавающей точкой, представляющие время выполнения в пользовательском режиме и время выполнения в системном режиме соответственно. Остальные значения – целые числа. Подробную информацию об этих значениях см. на странице руководства getrusage(2). Краткое описание приводится ниже:Индекс
Поле
Ресурс
0ru_utimeвремя в пользовательском режиме (float)
1ru_stimeвремя в системном режиме (float)
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()¶ Возвращает количество байт в системной странице. (Оно может не совпадать с размером аппаратной страницы.)
Следующие символы RUSAGE_* передаются в функцию getrusage(), чтобы указать, для каких процессов следует предоставить информацию.
-
resource.RUSAGE_SELF¶ Передаётся в
getrusage()для запроса ресурсов, потребляемых вызывающим процессом, что представляет собой сумму ресурсов, использованных всеми потоками процесса.
-
resource.RUSAGE_CHILDREN¶ Передаётся в
getrusage()для запроса ресурсов, потреблённых дочерними процессами вызывающего процесса, которые были завершены и дожданы.
-
resource.RUSAGE_BOTH¶ Передаётся в
getrusage()для запроса ресурсов, потреблённых как текущим процессом, так и дочерними. Может быть недоступна на некоторых системах.
-
resource.RUSAGE_THREAD¶ Передаётся в
getrusage()для запроса ресурсов, потреблённых текущим потоком. Может быть недоступна на некоторых системах.Новое в версии 3.2.