resource
— Информация об использовании ресурсов¶
Этот модуль предоставляет основные механизмы для измерения и контроля системных ресурсов, используемых программой.
Availability: Unix, не WASI.
Символьные константы используются для указания определенных системных ресурсов и запроса информации об их использовании как текущим процессом, так и его дочерними процессами.
При сбое системного вызова выдается сообщение OSError
.
Лимиты ресурсов¶
Использование ресурсов можно ограничить с помощью функции setrlimit()
, описанной ниже. Каждый ресурс контролируется парой ограничений: мягким и жестким. Мягкий лимит - это текущий лимит, который может быть понижен или повышен процессом с течением времени. Мягкий предел никогда не может превышать жесткий предел. Жесткий лимит может быть снижен до любого значения, превышающего мягкий лимит, но не повышен. (Только процессы с эффективным UID суперпользователя могут повышать жесткий лимит).
Конкретные ресурсы, которые могут быть ограничены, зависят от системы. Они описаны на странице getrlimit(2) man. Ресурсы, перечисленные ниже, поддерживаются, если их поддерживает базовая операционная система; ресурсы, которые не могут быть проверены или контролироваться операционной системой, не определены в этом модуле для этих платформ.
- 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.
Added in version 3.4.
Эти символы определяют ресурсы, потреблением которых можно управлять с помощью функций setrlimit()
и getrlimit()
, описанных ниже. Значения этих символов в точности соответствуют константам, используемым в программах на языке C.
На странице Unix man для 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.
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¶
Максимальный размер (в байтах) буфера сокета для данного пользователя. Это ограничивает объем сетевой памяти и, следовательно, объем mbufs, который может занимать этот пользователь в любой момент времени.
Availability: FreeBSD.
Added in version 3.4.
- resource.RLIMIT_SWAP¶
Максимальный размер (в байтах) пространства подкачки, которое может быть зарезервировано или использовано всеми процессами этого идентификатора пользователя. Это ограничение выполняется только в том случае, если установлен бит 1 в sysctl vm.overcommit. Полное описание этого sysctl см. в разделе tuning(7).
Availability: FreeBSD.
Added in version 3.4.
- resource.RLIMIT_NPTS¶
Максимальное количество псевдотерминалов, созданных этим идентификатором пользователя.
Availability: FreeBSD.
Added in version 3.4.
- resource.RLIMIT_KQUEUES¶
Максимальное количество kqueues, которое может создать этот идентификатор пользователя.
Availability: FreeBSD >= 11.
Added in version 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()
для запроса ресурсов, потребляемых текущим потоком. Может быть доступно не на всех системах.Added in version 3.2.