resource
— Информация об использовании ресурсов¶
Этот модуль предоставляет базовые механизмы для измерения и контроля системных ресурсов, используемых программой.
Availability: Unix, не Emscripten, не БЫЛ I.
Символьные константы используются для указания конкретных системных ресурсов и запроса информации об использовании либо текущего процесса, либо его дочерних процессов.
При сбое системного вызова выдается сообщение OSError
.
Ограничения ресурсов¶
Использование ресурсов можно ограничить с помощью функции setrlimit()
, описанной ниже. Для каждого ресурса существует пара ограничений: мягкое ограничение и жесткое ограничение. Мягкое ограничение - это текущее ограничение, которое может быть снижено или увеличено процессом с течением времени. Мягкое ограничение никогда не может превышать жесткое ограничение. Жесткое ограничение может быть снижено до любого значения, превышающего мягкое ограничение, но не может быть повышено. (Только процессы с действующим UID суперпользователя могут повысить жесткое ограничение.)
Конкретные ресурсы, которые могут быть ограничены, зависят от системы. Они описаны на странице руководства getrlimit(2). Перечисленные ниже ресурсы поддерживаются в том случае, если их поддерживает базовая операционная система; ресурсы, которые не могут быть проверены или контролироваться операционной системой, не определены в этом модуле для этих платформ.
- resource.RLIM_INFINITY¶
Константа, используемая для обозначения лимита на неограниченный ресурс.
- resource.getrlimit(resource)¶
Возвращает кортеж
(soft, hard)
с текущими минимальными и жесткими ограничениями resource. Возвращает значение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 не задано, функция возвращает значение resource limit процесса pid. Если задано значение limits, то устанавливается значение resource limit процесса и возвращается прежнее значение ресурса.
Выдает
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()
, описанных ниже. Значения этих символов в точности соответствуют константам, используемым в программах на языке Си.
На странице руководства 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¶
Самая большая область отображаемой памяти, которую может занимать процесс.
Availability: FreeBSD >= 11.
- 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¶
Максимальный размер (в байтах) используемого буфера сокета для данного пользователя. Это ограничивает объем сетевой памяти и, следовательно, количество mbuf-файлов, которые этот пользователь может хранить в любое время.
Availability: FreeBSD.
Добавлено в версии 3.4.
- resource.RLIMIT_SWAP¶
Максимальный размер (в байтах) пространства подкачки, которое может быть зарезервировано или использовано всеми процессами с этим идентификатором пользователя. Это ограничение применяется только в том случае, если установлен бит 1 системного кода vm.overcommit. Пожалуйста, смотрите tuning(7) для получения полного описания этого sysctl.
Availability: FreeBSD.
Добавлено в версии 3.4.
- resource.RLIMIT_NPTS¶
Максимальное количество псевдотерминалов, созданных с помощью этого идентификатора пользователя.
Availability: FreeBSD.
Добавлено в версии 3.4.
- resource.RLIMIT_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.