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). Здесь представлен краткий обзор:Индекс
Поле
Ресурс
0ru_utimeвремя в режиме пользователя (плавающие секунды)
1ru_stimeвремя в системном режиме (плавающие секунды)
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.