Документация Python неофициальный перевод
Содержание страницы

resource – сведения об использовании ресурсовresource – Resource usage information


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

Доступность: Unix, не WASI.

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

OSError возбуждается при сбое системного вызова.

exception resource.error

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

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

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

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

Конкретные ресурсы, которые можно ограничивать, зависят от системы. Они описаны в 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. Процесс с эффективным UID суперпользователя может запрашивать любое допустимое значение лимита, включая неограниченное, но 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

Максимальный размер (в байтах) файла ядра (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

Наибольшая область отображаемой памяти, которую может занимать процесс. Обычно псевдоним RLIMIT_AS.

Доступность: Solaris, FreeBSD, NetBSD.

resource.RLIMIT_AS

Максимальная область (в байтах) адресного пространства, которую может занять процесс.

resource.RLIMIT_MSGQUEUE

Количество байтов, которое может быть выделено для очередей сообщений POSIX.

Доступность: Linux >= 2.6.8.

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

resource.RLIMIT_NICE

Верхний предел для значения 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, NetBSD.

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

resource.RLIMIT_SWAP

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

Доступность: FreeBSD >= 8.

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

resource.RLIMIT_NPTS

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

Доступность: FreeBSD >= 8.

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

resource.RLIMIT_KQUEUES

Максимальное количество kqueue-очередей, которое разрешено создать данному пользователю.

Доступность: FreeBSD >= 11.

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

Использование ресурсовResource Usage

Эти функции используются для получения информации об использовании ресурсов:

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 возвращаемого значения – это числа с плавающей запятой, представляющие количество времени, затраченного на выполнение в пользовательском режиме и количество времени, затраченного на выполнение в системном режиме, соответственно. Остальные значения – целые числа. За подробной информацией об этих значениях обратитесь к man-странице getrusage(2). Краткая сводка представлена ниже:

Индекс

Поле

Ресурс

0

ru_utime

время в пользовательском режиме (секунды, float)

1

ru_stime

время в системном режиме (секунды, float)

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.