resource.md
1> **Источник:** https://python-all.ru/3.0/library/resource.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# `resource` – Информация об использовании ресурсов89*Платформы:* Unix1011Этот модуль предоставляет базовые механизмы для измерения и контроля системных ресурсов, используемых программой.1213Символические константы используются для указания конкретных системных ресурсов и запроса информации об их использовании текущим процессом или его потомками.1415Для ошибок определено единственное исключение:1617#### `[resource.error]exception resource.error`1819Описанные ниже функции могут возбуждать эту ошибку, если системный вызов неожиданно завершится сбоем.2021## Ограничения ресурсов2223Использование ресурсов можно ограничить с помощью функции [`setrlimit()`](https://python-all.ru/3.0/library/resource.html#resource.setrlimit), описанной ниже. Каждый ресурс контролируется парой ограничений: мягким (soft) и жёстким (hard). Мягкое ограничение – это текущий предел, который процесс может со временем понизить или повысить. Мягкое ограничение никогда не может превышать жёсткое. Жёсткое ограничение можно понизить до любого значения, большего мягкого, но нельзя повысить. (Только процессы с эффективным UID суперпользователя могут повышать жёсткие ограничения.)2425Конкретные ресурсы, которые можно ограничивать, зависят от системы. Они описаны на странице руководства *getrlimit(2)*. Ресурсы, перечисленные ниже, поддерживаются, если их поддерживает базовая операционная система; ресурсы, которые не могут быть проверены или управляться операционной системой, не определены в этом модуле для таких платформ.2627#### `[resource.getrlimit]resource.getrlimit(resource)`2829Возвращает кортеж3031`(мягкий, жёсткий)`3233с текущими мягким и жёстким ограничениями для3435*resource*3637. Возбуждает3839[`ValueError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.ValueError)4041, если указан недопустимый ресурс, или4243[`error`](https://python-all.ru/3.0/library/resource.html#resource.error)4445, если соответствующий системный вызов неожиданно завершился ошибкой.4647#### `[resource.setrlimit]resource.setrlimit(resource, limits)`4849Устанавливает новые лимиты потребления *resource*. Аргумент *limits* должен быть кортежем `(soft, hard)` из двух целых чисел, описывающих новые лимиты. Значение `-1` можно использовать для указания максимально возможного верхнего предела.5051Возбуждает [`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), если системный вызов не удается.5253Эти символы определяют ресурсы, потребление которых можно контролировать с помощью функций [`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.5455Страница руководства Unix *getrlimit(2)* перечисляет доступные ресурсы. Обратите внимание, что не все системы используют один и тот же символ или значение для обозначения одного и того же ресурса. Этот модуль не пытается скрыть различия между платформами – символы, не определённые для платформы, не будут доступны из этого модуля на этой платформе.5657#### `[resource.RLIMIT_CORE]resource.RLIMIT_CORE`5859Максимальный размер (в байтах) файла ядра (core), который может создать текущий процесс. Это может привести к созданию частичного файла ядра, если для размещения всего образа процесса потребовался бы больший файл.6061#### `[resource.RLIMIT_CPU]resource.RLIMIT_CPU`6263Максимальное количество процессорного времени (в секундах), которое может использовать процесс. Если этот предел превышен, процессу отправляется сигнал6465`SIGXCPU`6667. (Смотрите документацию модуля6869[`signal`](https://python-all.ru/3.0/library/signal.html#module-signal)7071для получения информации о том, как перехватить этот сигнал и сделать что-то полезное, например, сбросить открытые файлы на диск.)7273#### `[resource.RLIMIT_FSIZE]resource.RLIMIT_FSIZE`7475Максимальный размер файла, который может создать процесс. Это влияет только на стек главного потока в многопоточном процессе.7677#### `[resource.RLIMIT_DATA]resource.RLIMIT_DATA`7879Максимальный размер (в байтах) кучи процесса.8081#### `[resource.RLIMIT_STACK]resource.RLIMIT_STACK`8283Максимальный размер (в байтах) стека вызовов для текущего процесса.8485#### `[resource.RLIMIT_RSS]resource.RLIMIT_RSS`8687Максимальный размер резидентного набора, который должен быть доступен процессу.8889#### `[resource.RLIMIT_NPROC]resource.RLIMIT_NPROC`9091Максимальное количество процессов, которое может создать текущий процесс.9293#### `[resource.RLIMIT_NOFILE]resource.RLIMIT_NOFILE`9495Максимальное количество открытых файловых дескрипторов для текущего процесса.9697#### `[resource.RLIMIT_OFILE]resource.RLIMIT_OFILE`9899Имя в BSD для100101[`RLIMIT_NOFILE`](https://python-all.ru/3.0/library/resource.html#resource.RLIMIT_NOFILE)102103.104105#### `[resource.RLIMIT_MEMLOCK]resource.RLIMIT_MEMLOCK`106107Максимальное адресное пространство, которое может быть заблокировано в памяти.108109#### `[resource.RLIMIT_VMEM]resource.RLIMIT_VMEM`110111Наибольшая область отображённой памяти, которую может занимать процесс.112113#### `[resource.RLIMIT_AS]resource.RLIMIT_AS`114115Максимальная область (в байтах) адресного пространства, которую может занять процесс.116117## Использование ресурсов118119Эти функции используются для получения информации об использовании ресурсов:120121#### `[resource.getrusage]resource.getrusage(who)`122123Эта функция возвращает объект, описывающий ресурсы, потребляемые либо текущим процессом, либо его потомками, в зависимости от параметра *who*. Параметр *who* должен быть задан с помощью одной из констант `RUSAGE_*`, описанных ниже.124125Поля возвращаемого значения описывают, как использовался определённый системный ресурс, например, время работы в пользовательском режиме или количество вытеснений процесса из основной памяти. Некоторые значения зависят от внутреннего тактового сигнала (clock tick), например, объём памяти, используемый процессом.126127Для обратной совместимости возвращаемое значение также доступно в виде кортежа из 16 элементов.128129The 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:130131| Индекс | Поле | Ресурс |132| --- | --- | --- |133| `0` | `ru_utime` | время в пользовательском режиме (float) |134| `1` | `ru_stime` | время в системном режиме (float) |135| `2` | `ru_maxrss` | максимальный размер резидентного набора |136| `3` | `ru_ixrss` | размер разделяемой памяти |137| `4` | `ru_idrss` | размер неразделяемой памяти |138| `5` | `ru_isrss` | размер неразделяемого стека |139| `6` | `ru_minflt` | страничные сбои без ввода-вывода |140| `7` | `ru_majflt` | страничные сбои, требующие ввода-вывода |141| `8` | `ru_nswap` | количество выгрузок на диск |142| `9` | `ru_inblock` | блокирующие операции ввода |143| `10` | `ru_oublock` | блокирующие операции вывода |144| `11` | `ru_msgsnd` | отправленные сообщения |145| `12` | `ru_msgrcv` | полученные сообщения |146| `13` | `ru_nsignals` | полученные сигналы |147| `14` | `ru_nvcsw` | добровольные переключения контекста |148| `15` | `ru_nivcsw` | вынужденные переключения контекста |149150Эта функция возбуждает исключение [`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).151152#### `[resource.getpagesize]resource.getpagesize()`153154Возвращает количество байт в системной странице. (Это значение может не совпадать с размером аппаратной страницы.) Эта функция полезна для определения объёма памяти (в байтах), используемого процессом. Третий элемент кортежа, возвращаемого функцией155156[`getrusage()`](https://python-all.ru/3.0/library/resource.html#resource.getrusage)157158, описывает использование памяти в страницах; умножение на размер страницы даёт количество байт.159160Следующие символы `RUSAGE_*` передаются функции [`getrusage()`](https://python-all.ru/3.0/library/resource.html#resource.getrusage), чтобы указать, для каких процессов должна предоставляться информация.161162#### `[resource.RUSAGE_SELF]resource.RUSAGE_SELF`163164[`RUSAGE_SELF`](https://python-all.ru/3.0/library/resource.html#resource.RUSAGE_SELF)165166следует использовать для запроса информации, относящейся только к самому процессу.167168#### `[resource.RUSAGE_CHILDREN]resource.RUSAGE_CHILDREN`169170Передаётся в171172[`getrusage()`](https://python-all.ru/3.0/library/resource.html#resource.getrusage)173174для запроса информации о ресурсах для дочерних процессов вызывающего процесса.175176#### `[resource.RUSAGE_BOTH]resource.RUSAGE_BOTH`177178Передаётся в179180[`getrusage()`](https://python-all.ru/3.0/library/resource.html#resource.getrusage)181182для запроса ресурсов, потреблённых как текущим процессом, так и дочерними процессами. Может быть недоступно во всех системах.183