resource
— Информация об использовании ресурсов¶
Модуль обеспечивает базовые механизмы для измерения и управления системными ресурсами, используемыми программой.
Символические константы - используемый, чтобы определить особые системные ресурсы и запросить информацию использования или о текущем процессе или о его потомков.
OSError
поднят при неудаче системного вызова.
Лимиты ресурсов¶
Использование ресурсов может быть ограничено с помощью функции setrlimit()
,
описанной ниже. Каждый ресурс управляется парой пределов: мягким лимитом и
жестким лимитом. Мягкий предел является пределом тока и может быть снижен или
повышен процессом с течением времени. Мягкий предел никогда не может превышать
жесткий предел. Трудный предел может быть понижен для любого значение больше,
чем мягкий предел, но не поднял. (Только процессы с эффективным UID
super-user могут увеличить жесткий предел.
Конкретные ресурсы, которые могут быть ограничены, зависят от системы. Они описаны на странице getrlimit(2) man. Перечисленные ниже ресурсы поддерживаются, когда базовая операционная система поддерживает их; ресурсы, которые не могут проверяться или контролироваться операционной системой, не определены в этом модуле для этих платформ.
-
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
. Процесс с эффективным UID super-пользователя может просить любой действительный предел значение, включая неограниченный, ноValueError
будет все еще поднят, если запрошенный предел превысит наложенное ограничение системы.setrlimit
также может вызватьerror
, если основной системный вызов завершается неуспешно.VxWorks поддерживает только настройку
RLIMIT_NOFILE
.Raises an auditing event
resource.setrlimit
with argumentsresource
,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
для процесса.Raises an auditing event
resource.prlimit
with argumentspid
,resource
,limits
.Availability: 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.
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 vm.overcommit sysctl. Полное описание этого sysctl см. в разделе tuning(7).
Availability: FreeBSD 9 или новее.
Добавлено в версии 3.4.
-
resource.
RLIMIT_NPTS
¶ Максимальное число псевдотерминалов, созданных этим идентификатором пользователя.
Availability: FreeBSD 9 или новее.
Добавлено в версии 3.4.
Использование ресурсов¶
Эти функции используются для получения информации об использовании ресурсов:
-
resource.
getrusage
(who)¶ Возвращает функции объект, который описывает ресурсы, потребляемые или текущим процессом или его детьми, как определено параметром who. Параметр who должен быть указан с помощью одной из констант
RUSAGE_*
, описанных ниже.Простой пример:
from resource import * import time # не связанная с процессором задача time.sleep(3) print(getrusage(RUSAGE_SELF)) # задача, связанная с процессором 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
, если указан недопустимый параметр кто. Это может также поднять исключениеerror
при необычных обстоятельствах.
-
resource.
getpagesize
()¶ Возвращает число байтов на странице системы. (Это не должно совпадать с размером страницы оборудования.)
Следующие символы RUSAGE_*
передаются в функцию getrusage()
, чтобы указать, для
каких процессов должна быть предоставлена информация.
-
resource.
RUSAGE_SELF
¶ Передать
getrusage()
для запроса ресурсов, потребляемых вызывающим процессом, который представляет собой сумму ресурсов, используемый всеми потоки процесса.
-
resource.
RUSAGE_CHILDREN
¶ Передать
getrusage()
для запроса ресурсов, потребляемых дочерними процессами вызывающего процесса, которые были прерваны и ожидали.
-
resource.
RUSAGE_BOTH
¶ Передать
getrusage()
для запроса ресурсов, потребляемых текущим и дочерними процессами. Возможно, не на всех системах.
-
resource.
RUSAGE_THREAD
¶ Передать
getrusage()
для запроса ресурсов, потребляемых текущим поток. Возможно, не на всех системах.Добавлено в версии 3.2.