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


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

Availability: Unix, не Emscripten, не БЫЛ I.

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

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

exception resource.error

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

Изменено в версии 3.3: После PEP 3151 этому классу был присвоен псевдоним OSError.

Ограничения ресурсов

Использование ресурсов можно ограничить с помощью функции setrlimit(), описанной ниже. Для каждого ресурса существует пара ограничений: мягкое ограничение и жесткое ограничение. Мягкое ограничение - это текущее ограничение, которое может быть снижено или увеличено процессом с течением времени. Мягкое ограничение никогда не может превышать жесткое ограничение. Жесткое ограничение может быть снижено до любого значения, превышающего мягкое ограничение, но не может быть повышено. (Только процессы с действующим UID суперпользователя могут повысить жесткое ограничение.)

Конкретные ресурсы, которые могут быть ограничены, зависят от системы. Они описаны на странице руководства getrlimit(2). Перечисленные ниже ресурсы поддерживаются в том случае, если их поддерживает базовая операционная система; ресурсы, которые не могут быть проверены или контролироваться операционной системой, не определены в этом модуле для этих платформ.

resource.RLIM_INFINITY

Константа, используемая для обозначения лимита на неограниченный ресурс.

resource.getrlimit(resource)

Возвращает кортеж (soft, hard) с текущими минимальными и жесткими ограничениями resource. Возвращает значение 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 не задано, функция возвращает значение resource limit процесса pid. Если задано значение limits, то устанавливается значение resource limit процесса и возвращается прежнее значение ресурса.

Выдает 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(), описанных ниже. Значения этих символов в точности соответствуют константам, используемым в программах на языке Си.

На странице руководства 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

Самая большая область отображаемой памяти, которую может занимать процесс.

Availability: FreeBSD >= 11.

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

Максимальный размер (в байтах) используемого буфера сокета для данного пользователя. Это ограничивает объем сетевой памяти и, следовательно, количество mbuf-файлов, которые этот пользователь может хранить в любое время.

Availability: FreeBSD.

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

resource.RLIMIT_SWAP

Максимальный размер (в байтах) пространства подкачки, которое может быть зарезервировано или использовано всеми процессами с этим идентификатором пользователя. Это ограничение применяется только в том случае, если установлен бит 1 системного кода vm.overcommit. Пожалуйста, смотрите tuning(7) для получения полного описания этого sysctl.

Availability: FreeBSD.

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

resource.RLIMIT_NPTS

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

Availability: FreeBSD.

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

resource.RLIMIT_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.

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