resource — Информация об использовании ресурсов
Этот модуль предоставляет базовые механизмы для измерения и управления системными ресурсами, используемыми программой.
Символьные константы используются для указания конкретных системных ресурсов и для запроса информации об использовании текущего процесса или его дочерних процессов.
При сбое системного вызова генерируется исключение OSError.
-
exception resource.error -
Устаревшее имя для
OSError.
Пределы ресурсов
Использование ресурсов может быть ограничено с помощью функции setrlimit(), описанной ниже. Каждый ресурс контролируется парой пределов: мягким и жёстким лимитом. Мягкий лимит — текущий лимит, который процесс может снижать или повышать со временем. Мягкий лимит никогда не может превышать жёсткий лимит. Жёсткий лимит может быть снижен до любого значения, большего, чем мягкий лимит, но не может быть повышен. (Только процессы с эффективным идентификатором пользователя суперпользователя могут повысить жёсткий лимит.)
Конкретные ресурсы, которые могут быть ограничены, зависят от системы. Они описаны в справочной странице getrlimit(2). Ресурсы, перечисленные ниже, поддерживаются, когда их поддерживает основная операционная система; ресурсы, которые не могут быть проверены или контролируются операционной системой, не определены в этом модуле для этих платформ.
-
resource.RLIM_INFINITY -
Константа, используемая для представления предела для неограниченного ресурса.
-
resource.getrlimit(resource) -
Возвращает кортеж
(soft, hard)с текущими мягкими и жёсткими лимитами resource. ВозбуждаетValueError, если указан неверный ресурс, илиerror, если системный вызов сбоит неожиданно.
-
resource.setrlimit(resource, limits) -
Устанавливает новые пределы потребления resource. Аргумент limits должен быть кортежем
(soft, hard)из двух целых чисел, описывающих новые пределы. ЗначениеRLIM_INFINITYможет быть использовано для запроса неограниченного предела.Возбуждает
ValueError, если указан неверный ресурс, если новый мягкий лимит превышает жёсткий лимит или если процесс пытается повысить свой жёсткий лимит. Указание пределаRLIM_INFINITY, когда жёсткий или системный лимит для данного ресурса не неограничен, приведёт кValueError. Процесс с эффективным идентификатором пользователя суперпользователя может запросить любое допустимое значение предела, включая неограниченное, ноValueErrorвсё равно будет возбуждено, если запрошенный предел превышает наложенный системой предел.setrlimitтакже может возбудитьerror, если системный вызов завершится неудачей.VxWorks поддерживает только установку
RLIMIT_NOFILE.Возбуждает событие аудита аудита
resource.setrlimitс аргументамиresource,limits.
-
resource.prlimit(pid, resource[, limits]) -
Объединяет
setrlimit()иgetrlimit()в одной функции и поддерживает получение и установку ограничений ресурсов произвольного процесса. Если pid равно 0, вызов применяется к текущему процессу. resource и limits имеют то же значение, что и вsetrlimit(), за исключением того, что limits является необязательным.Когда limits не указан, функция возвращает ограничение resource процесса pid. Когда limits указан, ограничение resource процесса устанавливается, и возвращается прежнее ограничение ресурса.
Возбуждает
ProcessLookupError, когда процесс pid не найден, иPermissionError, когда у пользователя нетCAP_SYS_RESOURCEдля процесса.Возбуждает событие аудита аудита
resource.prlimitс аргументамиpid,resource,limits.Доступность: Linux 2.6.36 или более поздняя версия с glibc 2.13 или более поздней.
Новая в версии 3.4.
Эти символы определяют ресурсы, чьё потребление может быть контролируемо с помощью функций setrlimit() и getrlimit(), описанных ниже. Значения этих символов точно соответствуют константам, используемым программами на C.
Страница руководства 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.
Доступность: Linux 2.6.8 или более поздняя версия.
Новая в версии 3.4.
-
resource.RLIMIT_NICE -
Предел уровня приоритета процесса (вычисляется как 20 - rlim_cur).
Доступность: Linux 2.6.12 или более поздняя версия.
Новая в версии 3.4.
-
resource.RLIMIT_RTPRIO -
Потолок реального приоритета.
Доступность: Linux 2.6.12 или более поздняя версия.
Новая в версии 3.4.
-
resource.RLIMIT_RTTIME -
Предел времени (в микросекундах) процессорного времени, которое процесс может потратить на выполнение под реальным планированием без выполнения блокирующего системного вызова.
Доступность: Linux 2.6.25 или более поздняя версия.
Новая в версии 3.4.
-
resource.RLIMIT_SIGPENDING -
Количество сигналов, которые может создать очередь процесса.
Доступность: Linux 2.6.8 или более поздняя версия.
Новая в версии 3.4.
-
resource.RLIMIT_SBSIZE -
Максимальный размер (в байтах) использования буфера сокета для данного пользователя. Это ограничение количества сетевой памяти и, следовательно, количества mbuf, которые может удерживать данный пользователь в любое время.
Доступность: FreeBSD 9 и более поздние версии.
Введено в версии 3.4.
-
resource.RLIMIT_SWAP -
Максимальный размер (в байтах) пространства подкачки, которое может быть зарезервировано или использовано всеми процессами данного пользователя. Это ограничение применяется только в том случае, если бит 1 системной настройки vm.overcommit установлен. Обратитесь к tuning(7) для получения полного описания этой системной настройки.
Доступность: FreeBSD 9 и более поздние версии.
Введено в версии 3.4.
-
resource.RLIMIT_NPTS -
Максимальное количество псевдотерминалов, созданных данным пользователем.
Доступность: FreeBSD 9 и более поздние версии.
Введено в версии 3.4.
Использование ресурсов
Эти функции используются для получения информации об использовании ресурсов:
-
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.
© 2001–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.9/library/resource.html