resource — Информация об использовании ресурсов


Этот модуль предоставляет основные механизмы для измерения и контроля системных ресурсов, используемых программой.

Символьные константы используются для указания конкретных системных ресурсов и для запроса информации об их использовании либо текущим процессом, либо его дочерними процессами.

При отказе системного вызова выдается сообщение OSError.

exception resource.error

Утративший силу псевдоним OSError.

Изменено в версии 3.3: После PEP 3151 этот класс стал псевдонимом 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). Здесь представлен краткий обзор:

Индекс

Поле

Ресурс

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() для запроса ресурсов, потребляемых текущим потоком. Может быть доступно не на всех системах.

Добавлено в версии 3.2.

Вернуться на верх