Содержание страницы
33.11. resource – Информация об использовании ресурсов¶resource – Resource usage information
Платформы: Unix
Этот модуль предоставляет базовые механизмы для измерения и контроля системных ресурсов, используемых программой.
Символические константы используются для указания конкретных системных ресурсов и запроса информации об их использовании текущим процессом или его потомками.
Для ошибок определено единственное исключение:
- exception resource.error¶
Описанные ниже функции могут возбуждать эту ошибку, если системный вызов неожиданно завершится сбоем.
33.11.1. Ограничения ресурсов¶Resource Limits
Использование ресурсов можно ограничить с помощью функции setrlimit(), описанной ниже. Каждый ресурс контролируется парой ограничений: мягким (soft) и жёстким (hard). Мягкое ограничение – это текущий предел, который процесс может со временем понизить или повысить. Мягкое ограничение никогда не может превышать жёсткое. Жёсткое ограничение можно понизить до любого значения, большего мягкого, но нельзя повысить. (Только процессы с эффективным UID суперпользователя могут повышать жёсткие ограничения.)
Конкретные ресурсы, которые можно ограничивать, зависят от системы. Они описаны на странице руководства getrlimit(2). Ресурсы, перечисленные ниже, поддерживаются, если их поддерживает базовая операционная система; ресурсы, которые не могут быть проверены или управляться операционной системой, не определены в этом модуле для таких платформ.
- resource.getrlimit(resource)¶
Возвращает кортеж (мягкий, жёсткий) с текущими мягким и жёстким ограничениями для resource. Возбуждает ValueError, если указан недопустимый ресурс, или error, если соответствующий системный вызов неожиданно завершился ошибкой.
- resource.setrlimit(resource, limits)¶
Устанавливает новые лимиты потребления resource. Аргумент limits должен быть кортежем (soft, hard) из двух целых чисел, описывающих новые лимиты. Значение -1 можно использовать для указания максимально возможного верхнего предела.
Возбуждает ValueError, если указан недопустимый ресурс, если новый мягкий лимит превышает жесткий лимит, или если процесс пытается увеличить свой жесткий лимит (если процесс не имеет эффективного UID суперпользователя). Также может возбуждать error, если системный вызов не удается.
Эти символы определяют ресурсы, потребление которых можно контролировать с помощью функций 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¶
Максимальная область (в байтах) адресного пространства, которую может занять процесс.
33.11.2. Использование ресурсов¶Resource Usage
Эти функции используются для получения информации об использовании ресурсов:
- resource.getrusage(who)¶
Эта функция возвращает объект, описывающий ресурсы, потребляемые либо текущим процессом, либо его потомками, в зависимости от параметра who. Параметр who должен быть задан с помощью одной из констант RUSAGE_*, описанных ниже.
Поля возвращаемого значения описывают, как использовался определённый системный ресурс, например, время работы в пользовательском режиме или количество вытеснений процесса из основной памяти. Некоторые значения зависят от внутреннего тактового сигнала (clock tick), например, объём памяти, используемый процессом.
Для обратной совместимости возвращаемое значение также доступно в виде кортежа из 16 элементов.
The fields ru_utime and ru_stime of 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:
Индекс Поле Ресурс 0 ru_utime время в пользовательском режиме (float) 1 ru_stime время в системном режиме (float) 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()¶
Возвращает количество байт в системной странице. (Это значение может не совпадать с размером аппаратной страницы.) Эта функция полезна для определения объёма памяти (в байтах), используемого процессом. Третий элемент кортежа, возвращаемого функцией getrusage(), описывает использование памяти в страницах; умножение на размер страницы даёт количество байт.
Следующие символы RUSAGE_* передаются функции getrusage(), чтобы указать, для каких процессов должна предоставляться информация.
- resource.RUSAGE_SELF¶
Передаётся в getrusage() для запроса ресурсов, потреблённых вызывающим процессом; это сумма ресурсов, использованных всеми потоками процесса.
- resource.RUSAGE_CHILDREN¶
Передаётся в getrusage() для запроса ресурсов, потреблённых дочерними процессами вызывающего процесса, которые были завершены и ожидались.
- resource.RUSAGE_BOTH¶
Передаётся в getrusage() для запроса ресурсов, потреблённых как текущим процессом, так и дочерними процессами. Может быть недоступно во всех системах.
- resource.RUSAGE_THREAD¶
Передаётся в getrusage() для запроса ресурсов, потреблённых текущим потоком. Может быть недоступно во всех системах.
Новое в версии 3.2.