resource.md
1> **Источник:** https://python-all.ru/3.4/library/resource.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 35.11. [`resource`](https://python-all.ru/3.4/library/resource.html#module-resource) – Информация об использовании ресурсов89Этот модуль предоставляет базовые механизмы для измерения и контроля системных ресурсов, используемых программой.1011Символические константы используются для указания конкретных системных ресурсов и запроса информации об их использовании текущим процессом или его потомками.1213Исключение [`OSError`](https://python-all.ru/3.4/library/exceptions.html#OSError) возбуждается при сбое системного вызова.1415#### `exception resource.error`1617Устаревший псевдоним для [`OSError`](https://python-all.ru/3.4/library/exceptions.html#OSError).1819Изменено в версии 3.3: Согласно [**PEP 3151**](https://python-all.ru/3.4/library/resource.html), этот класс стал псевдонимом [`OSError`](https://python-all.ru/3.4/library/exceptions.html#OSError).2021## 35.11.1. Ограничения ресурсов2223Использование ресурсов можно ограничить с помощью функции [`setrlimit()`](https://python-all.ru/3.4/library/resource.html#resource.setrlimit), описанной ниже. Каждый ресурс контролируется парой ограничений: мягким (soft) и жёстким (hard). Мягкое ограничение – это текущий предел, который процесс может со временем понизить или повысить. Мягкое ограничение никогда не может превышать жёсткое. Жёсткое ограничение можно понизить до любого значения, большего мягкого, но нельзя повысить. (Только процессы с эффективным UID суперпользователя могут повышать жёсткие ограничения.)2425Конкретные ресурсы, которые можно ограничивать, зависят от системы. Они описаны на странице руководства *getrlimit(2)*. Ресурсы, перечисленные ниже, поддерживаются, если их поддерживает базовая операционная система; ресурсы, которые не могут быть проверены или управляться операционной системой, не определены в этом модуле для таких платформ.2627#### `resource.RLIM_INFINITY`2829Константа, используемая для обозначения неограниченного лимита ресурса.3031#### `resource.getrlimit(resource)`3233Возвращает кортеж `(мягкий, жёсткий)` с текущими мягким и жёстким ограничениями для *resource*. Возбуждает [`ValueError`](https://python-all.ru/3.4/library/exceptions.html#ValueError), если указан недопустимый ресурс, или [`error`](https://python-all.ru/3.4/library/resource.html#resource.error), если соответствующий системный вызов неожиданно завершился ошибкой.3435#### `resource.setrlimit(resource, limits)`3637Устанавливает новые пределы потребления для *resource*. Аргумент *limits* должен быть кортежем `(мягкий, жёсткий)` из двух целых чисел, описывающих новые ограничения. Значение [`RLIM_INFINITY`](https://python-all.ru/3.4/library/resource.html#resource.RLIM_INFINITY) можно использовать, чтобы запросить неограниченный предел.3839Возбуждает [`ValueError`](https://python-all.ru/3.4/library/exceptions.html#ValueError), если указан недопустимый ресурс, если новое мягкое ограничение превышает жёсткое, или если процесс пытается повысить своё жёсткое ограничение. Указание предела [`RLIM_INFINITY`](https://python-all.ru/3.4/library/resource.html#resource.RLIM_INFINITY), когда жёсткий или системный предел для этого ресурса не является неограниченным, приведёт к [`ValueError`](https://python-all.ru/3.4/library/exceptions.html#ValueError). Процесс с эффективным UID суперпользователя может запрашивать любые допустимые значения пределов, включая неограниченные, но [`ValueError`](https://python-all.ru/3.4/library/exceptions.html#ValueError) всё равно будет возбуждено, если запрошенный предел превышает установленный системой лимит.4041`setrlimit` также может возбуждать [`error`](https://python-all.ru/3.4/library/resource.html#resource.error), если соответствующий системный вызов завершится ошибкой.4243#### `resource.prlimit(pid, resource[, limits])`4445Объединяет [`setrlimit()`](https://python-all.ru/3.4/library/resource.html#resource.setrlimit) и [`getrlimit()`](https://python-all.ru/3.4/library/resource.html#resource.getrlimit) в одной функции и позволяет получать и устанавливать ограничения ресурсов произвольного процесса. Если *pid* равен 0, вызов применяется к текущему процессу. *resource* и *limits* имеют тот же смысл, что и в [`setrlimit()`](https://python-all.ru/3.4/library/resource.html#resource.setrlimit), за исключением того, что *limits* является необязательным.4647Если *limits* не указан, функция возвращает лимит *resource* процесса *pid*. Если *limits* указан, лимит *resource* процесса устанавливается, и возвращается предыдущий лимит ресурса.4849Возбуждает [`ProcessLookupError`](https://python-all.ru/3.4/library/exceptions.html#ProcessLookupError), когда *pid* не найден, и [`PermissionError`](https://python-all.ru/3.4/library/exceptions.html#PermissionError), когда у пользователя нет `CAP_SYS_RESOURCE` для этого процесса.5051Доступность: Linux 2.6.36 или новее с glibc 2.13 или новее5253Новое в версии 3.4.5455Эти символы определяют ресурсы, потребление которых можно контролировать с помощью функций [`setrlimit()`](https://python-all.ru/3.4/library/resource.html#resource.setrlimit) и [`getrlimit()`](https://python-all.ru/3.4/library/resource.html#resource.getrlimit), описанных ниже. Значения этих символов – это в точности константы, используемые в программах на C.5657Страница руководства Unix *getrlimit(2)* перечисляет доступные ресурсы. Обратите внимание, что не все системы используют один и тот же символ или значение для обозначения одного и того же ресурса. Этот модуль не пытается скрыть различия между платформами – символы, не определённые для платформы, не будут доступны из этого модуля на этой платформе.5859#### `resource.RLIMIT_CORE`6061Максимальный размер (в байтах) файла ядра (core), который может создать текущий процесс. Это может привести к созданию частичного файла ядра, если для размещения всего образа процесса потребовался бы больший файл.6263#### `resource.RLIMIT_CPU`6465Максимальное количество процессорного времени (в секундах), которое может использовать процесс. Если этот предел превышен, процессу отправляется сигнал `SIGXCPU`. (Смотрите документацию модуля [`signal`](https://python-all.ru/3.4/library/signal.html#module-signal) для получения информации о том, как перехватить этот сигнал и сделать что-то полезное, например, сбросить открытые файлы на диск.)6667#### `resource.RLIMIT_FSIZE`6869Максимальный размер файла, который может создать процесс. Это влияет только на стек главного потока в многопоточном процессе.7071#### `resource.RLIMIT_DATA`7273Максимальный размер (в байтах) кучи процесса.7475#### `resource.RLIMIT_STACK`7677Максимальный размер (в байтах) стека вызовов для текущего процесса.7879#### `resource.RLIMIT_RSS`8081Максимальный размер резидентного набора, который должен быть доступен процессу.8283#### `resource.RLIMIT_NPROC`8485Максимальное количество процессов, которое может создать текущий процесс.8687#### `resource.RLIMIT_NOFILE`8889Максимальное количество открытых файловых дескрипторов для текущего процесса.9091#### `resource.RLIMIT_OFILE`9293Имя в BSD для [`RLIMIT_NOFILE`](https://python-all.ru/3.4/library/resource.html#resource.RLIMIT_NOFILE).9495#### `resource.RLIMIT_MEMLOCK`9697Максимальное адресное пространство, которое может быть заблокировано в памяти.9899#### `resource.RLIMIT_VMEM`100101Наибольшая область отображённой памяти, которую может занимать процесс.102103#### `resource.RLIMIT_AS`104105Максимальная область (в байтах) адресного пространства, которую может занять процесс.106107#### `resource.RLIMIT_MSGQUEUE`108109Количество байтов, которое может быть выделено для очередей сообщений POSIX.110111Доступность: Linux 2.6.8 или новее.112113Новое в версии 3.4.114115#### `resource.RLIMIT_NICE`116117Верхний предел для значения nice процесса (вычисляется как 20 - rlim\_cur).118119Доступность: Linux 2.6.12 или новее.120121Новое в версии 3.4.122123#### `resource.RLIMIT_RTPRIO`124125Верхний предел приоритета реального времени.126127Доступность: Linux 2.6.12 или новее.128129Новое в версии 3.4.130131#### `resource.RLIMIT_RTTIME`132133Лимит времени (в микросекундах) процессорного времени, которое процесс может потратить в режиме планирования реального времени без выполнения блокирующего системного вызова.134135Доступность: Linux 2.6.25 или новее.136137Новое в версии 3.4.138139#### `resource.RLIMIT_SIGPENDING`140141Количество сигналов, которое процесс может поставить в очередь.142143Доступность: Linux 2.6.8 или новее.144145Новое в версии 3.4.146147#### `resource.RLIMIT_SBSIZE`148149Максимальный размер (в байтах) буфера сокета для данного пользователя. Это ограничивает объём сетевой памяти и, следовательно, количество mbuf-буферов, которыми этот пользователь может одновременно располагать.150151Доступность: FreeBSD 9 или новее.152153Новое в версии 3.4.154155#### `resource.RLIMIT_SWAP`156157Максимальный размер (в байтах) пространства подкачки, которое может быть зарезервировано или использовано всеми процессами данного идентификатора пользователя. Это ограничение действует только если установлен бит 1 sysctl vm.overcommit. Полное описание этого sysctl см. на странице *tuning(7)*.158159Доступность: FreeBSD 9 или новее.160161Новое в версии 3.4.162163#### `resource.RLIMIT_NPTS`164165Максимальное количество псевдотерминалов, созданных данным идентификатором пользователя.166167Доступность: FreeBSD 9 или новее.168169Новое в версии 3.4.170171## 35.11.2. Использование ресурсов172173Эти функции используются для получения информации об использовании ресурсов:174175#### `resource.getrusage(who)`176177Эта функция возвращает объект, описывающий ресурсы, потребляемые либо текущим процессом, либо его потомками, в зависимости от параметра *who*. Параметр *who* должен быть задан с помощью одной из констант `RUSAGE_*`, описанных ниже.178179Поля возвращаемого значения описывают, как использовался определённый системный ресурс, например, время работы в пользовательском режиме или количество вытеснений процесса из основной памяти. Некоторые значения зависят от внутреннего тактового сигнала (clock tick), например, объём памяти, используемый процессом.180181Для обратной совместимости возвращаемое значение также доступно в виде кортежа из 16 элементов.182183The 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:184185| Индекс | Поле | Ресурс |186| --- | --- | --- |187| `0` | `ru_utime` | время в пользовательском режиме (float) |188| `1` | `ru_stime` | время в системном режиме (float) |189| `2` | `ru_maxrss` | максимальный размер резидентного набора |190| `3` | `ru_ixrss` | размер разделяемой памяти |191| `4` | `ru_idrss` | размер неразделяемой памяти |192| `5` | `ru_isrss` | размер неразделяемого стека |193| `6` | `ru_minflt` | страничные сбои без ввода-вывода |194| `7` | `ru_majflt` | страничные сбои, требующие ввода-вывода |195| `8` | `ru_nswap` | количество выгрузок на диск |196| `9` | `ru_inblock` | блокирующие операции ввода |197| `10` | `ru_oublock` | блокирующие операции вывода |198| `11` | `ru_msgsnd` | отправленные сообщения |199| `12` | `ru_msgrcv` | полученные сообщения |200| `13` | `ru_nsignals` | полученные сигналы |201| `14` | `ru_nvcsw` | добровольные переключения контекста |202| `15` | `ru_nivcsw` | вынужденные переключения контекста |203204Эта функция возбуждает исключение [`ValueError`](https://python-all.ru/3.4/library/exceptions.html#ValueError), если указан недопустимый параметр *who*. В необычных ситуациях также может быть возбуждено исключение [`error`](https://python-all.ru/3.4/library/resource.html#resource.error).205206#### `resource.getpagesize()`207208Возвращает количество байт в системной странице. (Оно может не совпадать с размером аппаратной страницы.)209210Следующие символы `RUSAGE_*` передаются функции [`getrusage()`](https://python-all.ru/3.4/library/resource.html#resource.getrusage), чтобы указать, для каких процессов должна предоставляться информация.211212#### `resource.RUSAGE_SELF`213214Передаётся в [`getrusage()`](https://python-all.ru/3.4/library/resource.html#resource.getrusage) для запроса ресурсов, потреблённых вызывающим процессом; это сумма ресурсов, использованных всеми потоками процесса.215216#### `resource.RUSAGE_CHILDREN`217218Передаётся в [`getrusage()`](https://python-all.ru/3.4/library/resource.html#resource.getrusage) для запроса ресурсов, потреблённых дочерними процессами вызывающего процесса, которые были завершены и ожидались.219220#### `resource.RUSAGE_BOTH`221222Передаётся в [`getrusage()`](https://python-all.ru/3.4/library/resource.html#resource.getrusage) для запроса ресурсов, потреблённых как текущим процессом, так и дочерними процессами. Может быть недоступно во всех системах.223224#### `resource.RUSAGE_THREAD`225226Передаётся в [`getrusage()`](https://python-all.ru/3.4/library/resource.html#resource.getrusage) для запроса ресурсов, потреблённых текущим потоком. Может быть недоступно во всех системах.227228Новое в версии 3.2.229