resource.md
1> **Источник:** https://python-all.ru/3.2/library/resource.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 33.11. [`resource`](https://python-all.ru/3.2/library/resource.html#module-resource) – Информация об использовании ресурсов89*Платформы:* Unix1011Этот модуль предоставляет базовые механизмы для измерения и контроля системных ресурсов, используемых программой.1213Символические константы используются для указания конкретных системных ресурсов и запроса информации об их использовании текущим процессом или его потомками.1415Для ошибок определено единственное исключение:1617#### `exception resource.error`1819Описанные ниже функции могут возбуждать эту ошибку, если системный вызов неожиданно завершится сбоем.2021## 33.11.1. Ограничения ресурсов2223Использование ресурсов можно ограничить с помощью функции [`setrlimit()`](https://python-all.ru/3.2/library/resource.html#resource.setrlimit), описанной ниже. Каждый ресурс контролируется парой ограничений: мягким (soft) и жёстким (hard). Мягкое ограничение – это текущий предел, который процесс может со временем понизить или повысить. Мягкое ограничение никогда не может превышать жёсткое. Жёсткое ограничение можно понизить до любого значения, большего мягкого, но нельзя повысить. (Только процессы с эффективным UID суперпользователя могут повышать жёсткие ограничения.)2425Конкретные ресурсы, которые можно ограничивать, зависят от системы. Они описаны на странице руководства *getrlimit(2)*. Ресурсы, перечисленные ниже, поддерживаются, если их поддерживает базовая операционная система; ресурсы, которые не могут быть проверены или управляться операционной системой, не определены в этом модуле для таких платформ.2627#### `resource.getrlimit(resource)`2829Возвращает кортеж `(мягкий, жёсткий)` с текущими мягким и жёстким ограничениями для *resource*. Возбуждает [`ValueError`](https://python-all.ru/3.2/library/exceptions.html#ValueError), если указан недопустимый ресурс, или [`error`](https://python-all.ru/3.2/library/resource.html#resource.error), если соответствующий системный вызов неожиданно завершился ошибкой.3031#### `resource.setrlimit(resource, limits)`3233Устанавливает новые лимиты потребления *resource*. Аргумент *limits* должен быть кортежем `(soft, hard)` из двух целых чисел, описывающих новые лимиты. Значение `-1` можно использовать для указания максимально возможного верхнего предела.3435Возбуждает [`ValueError`](https://python-all.ru/3.2/library/exceptions.html#ValueError), если указан недопустимый ресурс, если новый мягкий лимит превышает жесткий лимит, или если процесс пытается увеличить свой жесткий лимит (если процесс не имеет эффективного UID суперпользователя). Также может возбуждать [`error`](https://python-all.ru/3.2/library/resource.html#resource.error), если системный вызов не удается.3637Эти символы определяют ресурсы, потребление которых можно контролировать с помощью функций [`setrlimit()`](https://python-all.ru/3.2/library/resource.html#resource.setrlimit) и [`getrlimit()`](https://python-all.ru/3.2/library/resource.html#resource.getrlimit), описанных ниже. Значения этих символов – это в точности константы, используемые в программах на C.3839Страница руководства Unix *getrlimit(2)* перечисляет доступные ресурсы. Обратите внимание, что не все системы используют один и тот же символ или значение для обозначения одного и того же ресурса. Этот модуль не пытается скрыть различия между платформами – символы, не определённые для платформы, не будут доступны из этого модуля на этой платформе.4041#### `resource.RLIMIT_CORE`4243Максимальный размер (в байтах) файла ядра (core), который может создать текущий процесс. Это может привести к созданию частичного файла ядра, если для размещения всего образа процесса потребовался бы больший файл.4445#### `resource.RLIMIT_CPU`4647Максимальное количество процессорного времени (в секундах), которое может использовать процесс. Если этот предел превышен, процессу отправляется сигнал `SIGXCPU`. (Смотрите документацию модуля [`signal`](https://python-all.ru/3.2/library/signal.html#module-signal) для получения информации о том, как перехватить этот сигнал и сделать что-то полезное, например, сбросить открытые файлы на диск.)4849#### `resource.RLIMIT_FSIZE`5051Максимальный размер файла, который может создать процесс. Это влияет только на стек главного потока в многопоточном процессе.5253#### `resource.RLIMIT_DATA`5455Максимальный размер (в байтах) кучи процесса.5657#### `resource.RLIMIT_STACK`5859Максимальный размер (в байтах) стека вызовов для текущего процесса.6061#### `resource.RLIMIT_RSS`6263Максимальный размер резидентного набора, который должен быть доступен процессу.6465#### `resource.RLIMIT_NPROC`6667Максимальное количество процессов, которое может создать текущий процесс.6869#### `resource.RLIMIT_NOFILE`7071Максимальное количество открытых файловых дескрипторов для текущего процесса.7273#### `resource.RLIMIT_OFILE`7475Имя в BSD для [`RLIMIT_NOFILE`](https://python-all.ru/3.2/library/resource.html#resource.RLIMIT_NOFILE).7677#### `resource.RLIMIT_MEMLOCK`7879Максимальное адресное пространство, которое может быть заблокировано в памяти.8081#### `resource.RLIMIT_VMEM`8283Наибольшая область отображённой памяти, которую может занимать процесс.8485#### `resource.RLIMIT_AS`8687Максимальная область (в байтах) адресного пространства, которую может занять процесс.8889## 33.11.2. Использование ресурсов9091Эти функции используются для получения информации об использовании ресурсов:9293#### `resource.getrusage(who)`9495Эта функция возвращает объект, описывающий ресурсы, потребляемые либо текущим процессом, либо его потомками, в зависимости от параметра *who*. Параметр *who* должен быть задан с помощью одной из констант `RUSAGE_*`, описанных ниже.9697Поля возвращаемого значения описывают, как использовался определённый системный ресурс, например, время работы в пользовательском режиме или количество вытеснений процесса из основной памяти. Некоторые значения зависят от внутреннего тактового сигнала (clock tick), например, объём памяти, используемый процессом.9899Для обратной совместимости возвращаемое значение также доступно в виде кортежа из 16 элементов.100101The 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:102103| Индекс | Поле | Ресурс |104| --- | --- | --- |105| `0` | `ru_utime` | время в пользовательском режиме (float) |106| `1` | `ru_stime` | время в системном режиме (float) |107| `2` | `ru_maxrss` | максимальный размер резидентного набора |108| `3` | `ru_ixrss` | размер разделяемой памяти |109| `4` | `ru_idrss` | размер неразделяемой памяти |110| `5` | `ru_isrss` | размер неразделяемого стека |111| `6` | `ru_minflt` | страничные сбои без ввода-вывода |112| `7` | `ru_majflt` | страничные сбои, требующие ввода-вывода |113| `8` | `ru_nswap` | количество выгрузок на диск |114| `9` | `ru_inblock` | блокирующие операции ввода |115| `10` | `ru_oublock` | блокирующие операции вывода |116| `11` | `ru_msgsnd` | отправленные сообщения |117| `12` | `ru_msgrcv` | полученные сообщения |118| `13` | `ru_nsignals` | полученные сигналы |119| `14` | `ru_nvcsw` | добровольные переключения контекста |120| `15` | `ru_nivcsw` | вынужденные переключения контекста |121122Эта функция возбуждает исключение [`ValueError`](https://python-all.ru/3.2/library/exceptions.html#ValueError), если указан недопустимый параметр *who*. В необычных ситуациях также может быть возбуждено исключение [`error`](https://python-all.ru/3.2/library/resource.html#resource.error).123124#### `resource.getpagesize()`125126Возвращает количество байт в системной странице. (Это значение может не совпадать с размером аппаратной страницы.) Эта функция полезна для определения объёма памяти (в байтах), используемого процессом. Третий элемент кортежа, возвращаемого функцией [`getrusage()`](https://python-all.ru/3.2/library/resource.html#resource.getrusage), описывает использование памяти в страницах; умножение на размер страницы даёт количество байт.127128Следующие символы `RUSAGE_*` передаются функции [`getrusage()`](https://python-all.ru/3.2/library/resource.html#resource.getrusage), чтобы указать, для каких процессов должна предоставляться информация.129130#### `resource.RUSAGE_SELF`131132Передаётся в [`getrusage()`](https://python-all.ru/3.2/library/resource.html#resource.getrusage) для запроса ресурсов, потреблённых вызывающим процессом; это сумма ресурсов, использованных всеми потоками процесса.133134#### `resource.RUSAGE_CHILDREN`135136Передаётся в [`getrusage()`](https://python-all.ru/3.2/library/resource.html#resource.getrusage) для запроса ресурсов, потреблённых дочерними процессами вызывающего процесса, которые были завершены и ожидались.137138#### `resource.RUSAGE_BOTH`139140Передаётся в [`getrusage()`](https://python-all.ru/3.2/library/resource.html#resource.getrusage) для запроса ресурсов, потреблённых как текущим процессом, так и дочерними процессами. Может быть недоступно во всех системах.141142#### `resource.RUSAGE_THREAD`143144Передаётся в [`getrusage()`](https://python-all.ru/3.2/library/resource.html#resource.getrusage) для запроса ресурсов, потреблённых текущим потоком. Может быть недоступно во всех системах.145146Новое в версии 3.2.147