> **Источник:** https://python-all.ru/3.0/library/resource.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

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

*Платформы:* Unix

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

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

Для ошибок определено единственное исключение:

#### `[resource.error]exception resource.error`

Описанные ниже функции могут возбуждать эту ошибку, если системный вызов неожиданно завершится сбоем.

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

Использование ресурсов можно ограничить с помощью функции [`setrlimit()`](https://python-all.ru/3.0/library/resource.html#resource.setrlimit), описанной ниже. Каждый ресурс контролируется парой ограничений: мягким (soft) и жёстким (hard). Мягкое ограничение – это текущий предел, который процесс может со временем понизить или повысить. Мягкое ограничение никогда не может превышать жёсткое. Жёсткое ограничение можно понизить до любого значения, большего мягкого, но нельзя повысить. (Только процессы с эффективным UID суперпользователя могут повышать жёсткие ограничения.)

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

#### `[resource.getrlimit]resource.getrlimit(resource)`

Возвращает кортеж

`(мягкий, жёсткий)`

с текущими мягким и жёстким ограничениями для

*resource*

. Возбуждает

[`ValueError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.ValueError)

, если указан недопустимый ресурс, или

[`error`](https://python-all.ru/3.0/library/resource.html#resource.error)

, если соответствующий системный вызов неожиданно завершился ошибкой.

#### `[resource.setrlimit]resource.setrlimit(resource, limits)`

Устанавливает новые лимиты потребления *resource*. Аргумент *limits* должен быть кортежем `(soft, hard)` из двух целых чисел, описывающих новые лимиты. Значение `-1` можно использовать для указания максимально возможного верхнего предела.

Возбуждает [`ValueError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.ValueError), если указан недопустимый ресурс, если новый мягкий лимит превышает жесткий лимит, или если процесс пытается увеличить свой жесткий лимит (если процесс не имеет эффективного UID суперпользователя). Также может возбуждать [`error`](https://python-all.ru/3.0/library/resource.html#resource.error), если системный вызов не удается.

Эти символы определяют ресурсы, потребление которых можно контролировать с помощью функций [`setrlimit()`](https://python-all.ru/3.0/library/resource.html#resource.setrlimit) и [`getrlimit()`](https://python-all.ru/3.0/library/resource.html#resource.getrlimit), описанных ниже. Значения этих символов – это в точности константы, используемые в программах на C.

Страница руководства Unix *getrlimit(2)* перечисляет доступные ресурсы. Обратите внимание, что не все системы используют один и тот же символ или значение для обозначения одного и того же ресурса. Этот модуль не пытается скрыть различия между платформами – символы, не определённые для платформы, не будут доступны из этого модуля на этой платформе.

#### `[resource.RLIMIT_CORE]resource.RLIMIT_CORE`

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

#### `[resource.RLIMIT_CPU]resource.RLIMIT_CPU`

Максимальное количество процессорного времени (в секундах), которое может использовать процесс. Если этот предел превышен, процессу отправляется сигнал

`SIGXCPU`

. (Смотрите документацию модуля

[`signal`](https://python-all.ru/3.0/library/signal.html#module-signal)

для получения информации о том, как перехватить этот сигнал и сделать что-то полезное, например, сбросить открытые файлы на диск.)

#### `[resource.RLIMIT_FSIZE]resource.RLIMIT_FSIZE`

Максимальный размер файла, который может создать процесс. Это влияет только на стек главного потока в многопоточном процессе.

#### `[resource.RLIMIT_DATA]resource.RLIMIT_DATA`

Максимальный размер (в байтах) кучи процесса.

#### `[resource.RLIMIT_STACK]resource.RLIMIT_STACK`

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

#### `[resource.RLIMIT_RSS]resource.RLIMIT_RSS`

Максимальный размер резидентного набора, который должен быть доступен процессу.

#### `[resource.RLIMIT_NPROC]resource.RLIMIT_NPROC`

Максимальное количество процессов, которое может создать текущий процесс.

#### `[resource.RLIMIT_NOFILE]resource.RLIMIT_NOFILE`

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

#### `[resource.RLIMIT_OFILE]resource.RLIMIT_OFILE`

Имя в BSD для

[`RLIMIT_NOFILE`](https://python-all.ru/3.0/library/resource.html#resource.RLIMIT_NOFILE)

.

#### `[resource.RLIMIT_MEMLOCK]resource.RLIMIT_MEMLOCK`

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

#### `[resource.RLIMIT_VMEM]resource.RLIMIT_VMEM`

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

#### `[resource.RLIMIT_AS]resource.RLIMIT_AS`

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

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

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

#### `[resource.getrusage]resource.getrusage(who)`

Эта функция возвращает объект, описывающий ресурсы, потребляемые либо текущим процессом, либо его потомками, в зависимости от параметра *who*. Параметр *who* должен быть задан с помощью одной из констант `RUSAGE_*`, описанных ниже.

Поля возвращаемого значения описывают, как использовался определённый системный ресурс, например, время работы в пользовательском режиме или количество вытеснений процесса из основной памяти. Некоторые значения зависят от внутреннего тактового сигнала (clock tick), например, объём памяти, используемый процессом.

Для обратной совместимости возвращаемое значение также доступно в виде кортежа из 16 элементов.

The fields `ru_utime` and `ru_stime` of the return value are floating point values representing the amount of time spent executing in user mode and the amount of time spent executing in system mode, respectively. The remaining values are integers. Consult the *getrusage(2)* man page for detailed information about these values. A brief summary is presented here:

| Индекс | Поле | Ресурс |
| --- | --- | --- |
| `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`](https://python-all.ru/3.0/library/exceptions.html#exceptions.ValueError), если указан недопустимый параметр *who*. В необычных ситуациях также может быть возбуждено исключение [`error`](https://python-all.ru/3.0/library/resource.html#resource.error).

#### `[resource.getpagesize]resource.getpagesize()`

Возвращает количество байт в системной странице. (Это значение может не совпадать с размером аппаратной страницы.) Эта функция полезна для определения объёма памяти (в байтах), используемого процессом. Третий элемент кортежа, возвращаемого функцией

[`getrusage()`](https://python-all.ru/3.0/library/resource.html#resource.getrusage)

, описывает использование памяти в страницах; умножение на размер страницы даёт количество байт.

Следующие символы `RUSAGE_*` передаются функции [`getrusage()`](https://python-all.ru/3.0/library/resource.html#resource.getrusage), чтобы указать, для каких процессов должна предоставляться информация.

#### `[resource.RUSAGE_SELF]resource.RUSAGE_SELF`

[`RUSAGE_SELF`](https://python-all.ru/3.0/library/resource.html#resource.RUSAGE_SELF)

следует использовать для запроса информации, относящейся только к самому процессу.

#### `[resource.RUSAGE_CHILDREN]resource.RUSAGE_CHILDREN`

Передаётся в

[`getrusage()`](https://python-all.ru/3.0/library/resource.html#resource.getrusage)

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

#### `[resource.RUSAGE_BOTH]resource.RUSAGE_BOTH`

Передаётся в

[`getrusage()`](https://python-all.ru/3.0/library/resource.html#resource.getrusage)

для запроса ресурсов, потреблённых как текущим процессом, так и дочерними процессами. Может быть недоступно во всех системах.
