resource
— Информация об использовании ресурсов¶
Этот модуль предоставляет основные механизмы для измерения и контроля системных ресурсов, используемых программой.
Символьные константы используются для указания конкретных системных ресурсов и для запроса информации об их использовании либо текущим процессом, либо его дочерними процессами.
При отказе системного вызова выдается сообщение OSError
.
Лимиты ресурсов¶
Использование ресурсов может быть ограничено с помощью функции setrlimit()
, описанной ниже. Каждый ресурс контролируется парой ограничений: мягким ограничением и жестким ограничением. Мягкий лимит - это текущий лимит, который может быть понижен или повышен процессом с течением времени. Мягкий предел никогда не может превышать жесткий предел. Жесткий лимит может быть снижен до любого значения, превышающего мягкий лимит, но не повышен. (Только процессы с эффективным UID суперпользователя могут повышать жесткий лимит).
Конкретные ресурсы, которые могут быть ограничены, зависят от системы. Они описаны на странице руководства getrlimit(2). Перечисленные ниже ресурсы поддерживаются, если их поддерживает базовая операционная система; ресурсы, которые не могут проверяться или контролироваться операционной системой, не определены в данном модуле для этих платформ.
-
resource.
RLIM_INFINITY
¶ Константа, используемая для обозначения предела для неограниченного ресурса.
-
resource.
getrlimit
(resource)¶ Возвращает кортеж
(soft, hard)
с текущими мягкими и жесткими ограничениями ресурса. Вызывает сообщениеValueError
, если указан недопустимый ресурс, илиerror
, если базовый системный вызов неожиданно завершился неудачно.
-
resource.
setrlimit
(resource, limits)¶ Устанавливает новые лимиты потребления ресурса. Аргумент limits должен представлять собой кортеж
(soft, hard)
из двух целых чисел, описывающих новые ограничения. ЗначениеRLIM_INFINITY
может быть использовано для запроса неограниченного лимита.Вызывает
ValueError
, если указан недопустимый ресурс, если новый мягкий лимит превышает жесткий лимит или если процесс пытается повысить свой жесткий лимит. Указание пределаRLIM_INFINITY
, когда жесткий или системный предел для этого ресурса не является неограниченным, приведет к появлениюValueError
. Процесс с эффективным UID суперпользователя может запросить любое допустимое значение лимита, включая неограниченный, ноValueError
все равно будет выдан, если запрошенный лимит превышает установленный системой лимит.setrlimit
может также вызвать ошибкуerror
, если базовый системный вызов не работает.VxWorks поддерживает только установку
RLIMIT_NOFILE
.Вызывает auditing event
resource.setrlimit
с аргументамиresource
,limits
.
-
resource.
prlimit
(pid, resource[, limits])¶ Объединяет
setrlimit()
иgetrlimit()
в одной функции и поддерживает получение и установку границ ресурсов произвольного процесса. Если pid равен 0, то вызов применяется к текущему процессу. resource и limits имеют то же значение, что и вsetrlimit()
, за исключением того, что limits является необязательным.Если limits не задан, функция возвращает ресурсный лимит процесса pid. Если limits задан, устанавливается ресурсный лимит процесса и возвращается прежний ресурсный лимит.
Вызывает
ProcessLookupError
, если pid не может быть найден, иPermissionError
, если у пользователя нетCAP_SYS_RESOURCE
для процесса.Вызывает auditing event
resource.prlimit
с аргументамиpid
,resource
,limits
.Availability: Linux 2.6.36 или более поздней версии с glibc 2.13 или более поздней версии.
Добавлено в версии 3.4.
Эти символы определяют ресурсы, потреблением которых можно управлять с помощью функций setrlimit()
и getrlimit()
, описанных ниже. Значения этих символов в точности соответствуют константам, используемым в программах на языке Си.
На man-странице Unix для getrlimit(2) перечислены доступные ресурсы. Обратите внимание, что не все системы используют один и тот же символ или одно и то же значение для обозначения одного и того же ресурса. Этот модуль не пытается скрыть различия между платформами — символы, не определенные для платформы, не будут доступны из этого модуля на этой платформе.
-
resource.
RLIMIT_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.
Availability: Linux 2.6.8 или более поздняя версия.
Добавлено в версии 3.4.
-
resource.
RLIMIT_NICE
¶ Потолок для уровня приятности процесса (рассчитывается как 20 - rlim_cur).
Availability: Linux 2.6.12 или более поздней версии.
Добавлено в версии 3.4.
-
resource.
RLIMIT_RTPRIO
¶ Потолок приоритета реального времени.
Availability: Linux 2.6.12 или более поздней версии.
Добавлено в версии 3.4.
-
resource.
RLIMIT_RTTIME
¶ Ограничение времени (в микросекундах) на процессорное время, которое процесс может потратить при планировании в реальном времени без выполнения блокирующего системного вызова.
Availability: Linux 2.6.25 или более поздней версии.
Добавлено в версии 3.4.
-
resource.
RLIMIT_SIGPENDING
¶ Количество сигналов, которые процесс может поставить в очередь.
Availability: Linux 2.6.8 или более поздняя версия.
Добавлено в версии 3.4.
-
resource.
RLIMIT_SBSIZE
¶ Максимальный размер (в байтах) использования буфера сокета для данного пользователя. Это ограничивает объем сетевой памяти и, следовательно, объем mbufs, который этот пользователь может занимать в любой момент времени.
Availability: FreeBSD 9 или более поздняя версия.
Добавлено в версии 3.4.
-
resource.
RLIMIT_SWAP
¶ Максимальный размер (в байтах) пространства подкачки, которое может быть зарезервировано или использовано всеми процессами данного пользователя. Это ограничение выполняется только в том случае, если установлен бит 1 в sysctl vm.overcommit. Полное описание этого sysctl смотрите в tuning(7).
Availability: FreeBSD 9 или более поздняя версия.
Добавлено в версии 3.4.
-
resource.
RLIMIT_NPTS
¶ Максимальное количество псевдотерминалов, созданных этим идентификатором пользователя.
Availability: FreeBSD 9 или более поздняя версия.
Добавлено в версии 3.4.
-
resource.
RLIMIT_KQUEUES
¶ Максимальное количество kqueues, которое разрешено создавать этому идентификатору пользователя.
Availability: FreeBSD 11 или более поздняя версия.
Добавлено в версии 3.10.
Использование ресурсов¶
Эти функции используются для получения информации об использовании ресурсов:
-
resource.
getrusage
(who)¶ Эта функция возвращает объект, описывающий ресурсы, потребляемые либо текущим процессом, либо его дочерними процессами, указанными параметром who. Параметр who должен быть задан с помощью одной из констант
RUSAGE_*
, описанных ниже.Простой пример:
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 элементов.
Поля
ru_utime
иru_stime
возвращаемого значения - это значения с плавающей точкой, представляющие количество времени, проведенного в пользовательском режиме, и количество времени, проведенного в системном режиме, соответственно. Остальные значения являются целыми числами. За подробной информацией об этих значениях обратитесь к странице руководства getrusage(2). Здесь представлен краткий обзор:Индекс
Поле
Ресурс
0
ru_utime
время в режиме пользователя (плавающие секунды)
1
ru_stime
время в системном режиме (плавающие секунды)
2
ru_maxrss
максимальный размер резидентного набора
3
ru_ixrss
размер общей памяти
4
ru_idrss
размер нераспределенной памяти
5
ru_isrss
размер неразделенного стека
6
ru_minflt
ошибки страниц, не требующие ввода/вывода
7
ru_majflt
ошибки страниц, требующие ввода/вывода
8
ru_nswap
количество обменов
9
ru_inblock
операции ввода блока
10
ru_oublock
операции вывода блока
11
ru_msgsnd
отправленные сообщения
12
ru_msgrcv
полученные сообщения
13
ru_nsignals
полученные сигналы
14
ru_nvcsw
добровольные контекстные переключения
15
ru_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.