resource.md · Markdown – Документация Python
Документация Python неофициальный перевод

resource.md

147 строк · 14.7 КБ · обычная страница · сырой текст · скачать

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