Документация Python неофициальный перевод

resource.md

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

1> **Источник:** https://python-all.ru/3.15/library/resource.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# `resource` – сведения об использовании ресурсов89---1011Этот модуль предоставляет базовые механизмы для измерения и контроля системных ресурсов, используемых программой.1213[Доступность](https://python-all.ru/3.15/library/intro.html#availability): Unix, не WASI.1415Символические константы используются для указания конкретных системных ресурсов и запроса информации об их использовании текущим процессом или его потомками.1617[`OSError`](https://python-all.ru/3.15/library/exceptions.html#OSError) возбуждается при сбое системного вызова.1819#### `exception resource.error`2021Устаревший псевдоним [`OSError`](https://python-all.ru/3.15/library/exceptions.html#OSError).2223Изменено в версии 3.3: В соответствии с [**PEP 3151**](https://python-all.ru/3.15/library/resource.html) этот класс стал псевдонимом [`OSError`](https://python-all.ru/3.15/library/exceptions.html#OSError).2425## Ограничения ресурсов2627Использование ресурсов можно ограничить с помощью функции [`setrlimit()`](https://python-all.ru/3.15/library/resource.html#resource.setrlimit), описанной ниже. Каждый ресурс управляется парой лимитов: мягким и жёстким. Мягкий лимит – это текущий лимит, и процесс со временем может его понижать или повышать. Мягкий лимит никогда не может превышать жёсткий. Жёсткий лимит можно понизить до любого значения, большего мягкого, но нельзя повысить. (Повысить жёсткий лимит могут только процессы с эффективным UID суперпользователя.)2829Конкретные ресурсы, которые можно ограничивать, зависят от системы. Они описаны в *[getrlimit(2)](https://python-all.ru/3.15/library/resource.html)*. Ресурсы, перечисленные ниже, поддерживаются, если их поддерживает базовая операционная система; ресурсы, которые не могут быть проверены или управляться ОС, для таких платформ в этом модуле не определены.3031#### `resource.RLIM_INFINITY`3233Константа, используемая для обозначения неограниченного лимита ресурса.3435Изменено в версии 3.15: Теперь всегда положительное. Ранее могло быть отрицательным, например -1 или -3.3637#### `resource.RLIM_SAVED_CUR`3839#### `resource.RLIM_SAVED_MAX`4041Константы, используемые для представления значений мягкого и жёсткого ограничения, если они не могут быть представлены в значении `rlim_t` в C. Могут быть равны [`RLIM_INFINITY`](https://python-all.ru/3.15/library/resource.html#resource.RLIM_INFINITY).4243Добавлено в версии 3.15.4445#### `resource.getrlimit(resource)`4647Возвращает кортеж `(soft, hard)` с текущими мягким и жёстким лимитами для *resource*. Возбуждает [`ValueError`](https://python-all.ru/3.15/library/exceptions.html#ValueError), если указан недопустимый ресурс, или [`error`](https://python-all.ru/3.15/library/resource.html#resource.error), если базовый системный вызов неожиданно завершился ошибкой.4849#### `resource.setrlimit(resource, limits)`5051Устанавливает новые лимиты потребления для *resource*. Аргумент *limits* должен быть кортежем `(soft, hard)` из двух целых чисел, описывающих новые лимиты. Значение [`RLIM_INFINITY`](https://python-all.ru/3.15/library/resource.html#resource.RLIM_INFINITY) можно использовать для запроса неограниченного лимита.5253Возбуждает [`ValueError`](https://python-all.ru/3.15/library/exceptions.html#ValueError), если указан недопустимый ресурс, новый мягкий лимит превышает жёсткий или процесс пытается повысить свой жёсткий лимит. Указание лимита [`RLIM_INFINITY`](https://python-all.ru/3.15/library/resource.html#resource.RLIM_INFINITY), когда жёсткий или системный лимит для этого ресурса не является неограниченным, приведёт к `ValueError`. Процесс с эффективным UID суперпользователя может запрашивать любое допустимое значение лимита, включая неограниченное, но `ValueError` всё равно будет возбуждено, если запрошенный лимит превышает установленный системой.5455`setrlimit` также может возбуждать [`error`](https://python-all.ru/3.15/library/resource.html#resource.error), если базовый системный вызов завершается ошибкой.5657VxWorks поддерживает только установку [`RLIMIT_NOFILE`](https://python-all.ru/3.15/library/resource.html#resource.RLIMIT_NOFILE).5859Возбуждает [событие аудита](https://python-all.ru/3.15/library/sys.html#auditing) `resource.setrlimit` с аргументами `resource`, `limits`.6061#### `resource.prlimit(pid, resource[, limits])`6263Объединяет [`setrlimit()`](https://python-all.ru/3.15/library/resource.html#resource.setrlimit) и [`getrlimit()`](https://python-all.ru/3.15/library/resource.html#resource.getrlimit) в одну функцию и позволяет получать и устанавливать ограничения ресурсов произвольного процесса. Если *pid* равен 0, вызов применяется к текущему процессу. *resource* и *limits* имеют то же значение, что и в `setrlimit()`, за исключением того, что *limits* является необязательным.6465Если *limits* не указан, функция возвращает лимит *resource* процесса *pid*. Если *limits* указан, лимит *resource* процесса устанавливается, и возвращается предыдущий лимит ресурса.6667Возбуждает [`ProcessLookupError`](https://python-all.ru/3.15/library/exceptions.html#ProcessLookupError), если *pid* не найден, и [`PermissionError`](https://python-all.ru/3.15/library/exceptions.html#PermissionError), если у пользователя нет `CAP_SYS_RESOURCE` для процесса.6869Вызывает [событие аудита](https://python-all.ru/3.15/library/sys.html#auditing) `resource.prlimit` с аргументами `pid`, `resource`, `limits`.7071[Доступность](https://python-all.ru/3.15/library/intro.html#availability): Linux \>= 2.6.36 с glibc \>= 2.13.7273Добавлено в версии 3.4.7475Эти символы определяют ресурсы, потребление которых можно контролировать с помощью функций [`setrlimit()`](https://python-all.ru/3.15/library/resource.html#resource.setrlimit) и [`getrlimit()`](https://python-all.ru/3.15/library/resource.html#resource.getrlimit), описанных ниже. Значения этих символов в точности соответствуют константам, используемым в программах на C.7677Справочная страница Unix для *[getrlimit(2)](https://python-all.ru/3.15/library/resource.html)* перечисляет доступные ресурсы. Обратите внимание, что не все системы используют один и тот же символ или значение для обозначения одного и того же ресурса. Этот модуль не пытается скрыть различия между платформами – символы, не определённые для платформы, не будут доступны в этом модуле на этой платформе.7879#### `resource.RLIMIT_CORE`8081Максимальный размер (в байтах) файла ядра (core), который может создать текущий процесс. Это может привести к созданию частичного файла ядра, если для размещения всего образа процесса потребовался бы больший файл.8283#### `resource.RLIMIT_CPU`8485Максимальное количество процессорного времени (в секундах), которое может использовать процесс. Если этот лимит превышен, процессу отправляется сигнал [`SIGXCPU`](https://python-all.ru/3.15/library/signal.html#signal.SIGXCPU). (См. документацию модуля [`signal`](https://python-all.ru/3.15/library/signal.html#module-signal) для получения информации о том, как перехватить этот сигнал и сделать что-то полезное, например, сбросить открытые файлы на диск.)8687#### `resource.RLIMIT_FSIZE`8889Максимальный размер файла, который может создать процесс.9091#### `resource.RLIMIT_DATA`9293Максимальный размер (в байтах) кучи процесса.9495#### `resource.RLIMIT_STACK`9697Максимальный размер (в байтах) стека вызовов для текущего процесса. Это влияет только на стек главного потока в многопоточном процессе.9899#### `resource.RLIMIT_RSS`100101Максимальный размер резидентного набора, который должен быть доступен процессу.102103#### `resource.RLIMIT_NPROC`104105Максимальное количество процессов, которое может создать текущий процесс.106107#### `resource.RLIMIT_NOFILE`108109Максимальное количество открытых файловых дескрипторов для текущего процесса.110111#### `resource.RLIMIT_OFILE`112113Имя в BSD для [`RLIMIT_NOFILE`](https://python-all.ru/3.15/library/resource.html#resource.RLIMIT_NOFILE).114115#### `resource.RLIMIT_MEMLOCK`116117Максимальное адресное пространство, которое может быть заблокировано в памяти.118119#### `resource.RLIMIT_VMEM`120121Наибольшая область отображаемой памяти, которую может занимать процесс. Обычно псевдоним [`RLIMIT_AS`](https://python-all.ru/3.15/library/resource.html#resource.RLIMIT_AS).122123[Доступность](https://python-all.ru/3.15/library/intro.html#availability): Solaris, FreeBSD, NetBSD.124125#### `resource.RLIMIT_AS`126127Максимальная область (в байтах) адресного пространства, которую может занять процесс.128129#### `resource.RLIMIT_MSGQUEUE`130131Количество байтов, которое может быть выделено для очередей сообщений POSIX.132133[Доступность](https://python-all.ru/3.15/library/intro.html#availability): Linux \>= 2.6.8.134135Добавлено в версии 3.4.136137#### `resource.RLIMIT_NICE`138139Верхний предел для значения nice процесса (вычисляется как 20 - rlim\_cur).140141[Доступность](https://python-all.ru/3.15/library/intro.html#availability): Linux \>= 2.6.12.142143Добавлено в версии 3.4.144145#### `resource.RLIMIT_RTPRIO`146147Верхний предел приоритета реального времени.148149[Доступность](https://python-all.ru/3.15/library/intro.html#availability): Linux \>= 2.6.12.150151Добавлено в версии 3.4.152153#### `resource.RLIMIT_RTTIME`154155Лимит времени (в микросекундах) процессорного времени, которое процесс может потратить в режиме планирования реального времени без выполнения блокирующего системного вызова.156157[Доступность](https://python-all.ru/3.15/library/intro.html#availability): Linux \>= 2.6.25.158159Добавлено в версии 3.4.160161#### `resource.RLIMIT_SIGPENDING`162163Количество сигналов, которое процесс может поставить в очередь.164165[Доступность](https://python-all.ru/3.15/library/intro.html#availability): Linux \>= 2.6.8.166167Добавлено в версии 3.4.168169#### `resource.RLIMIT_SBSIZE`170171Максимальный размер (в байтах) буфера сокета для данного пользователя. Это ограничивает объём сетевой памяти и, следовательно, количество mbuf-буферов, которыми этот пользователь может одновременно располагать.172173[Доступность](https://python-all.ru/3.15/library/intro.html#availability): FreeBSD, NetBSD.174175Добавлено в версии 3.4.176177#### `resource.RLIMIT_SWAP`178179Максимальный размер (в байтах) пространства подкачки, которое может быть зарезервировано или использовано всеми процессами данного идентификатора пользователя. Это ограничение применяется только если установлен бит 1 в sysctl vm.overcommit. Подробное описание этого sysctl см. в [tuning(7)](https://python-all.ru/3.15/library/resource.html).180181[Доступность](https://python-all.ru/3.15/library/intro.html#availability): FreeBSD \>= 8.182183Добавлено в версии 3.4.184185#### `resource.RLIMIT_NPTS`186187Максимальное количество псевдотерминалов, созданных данным идентификатором пользователя.188189[Доступность](https://python-all.ru/3.15/library/intro.html#availability): FreeBSD \>= 8.190191Добавлено в версии 3.4.192193#### `resource.RLIMIT_KQUEUES`194195Максимальное количество kqueue-очередей, которое разрешено создать данному пользователю.196197[Доступность](https://python-all.ru/3.15/library/intro.html#availability): FreeBSD \>= 11.198199Добавлено в версии 3.10.200201#### `resource.RLIMIT_NTHR`202203Максимальное количество потоков для данного идентификатора пользователя, не считая главного и ядерных потоков.204205[Доступность](https://python-all.ru/3.15/library/intro.html#availability): NetBSD \>= 7.0.206207Добавлено в версии 3.15.208209#### `resource.RLIMIT_PIPEBUF`210211Максимальный общий размер внутриядерных буферов для двунаправленных каналов/fifos, который может расходовать данный идентификатор пользователя.212213[Доступность](https://python-all.ru/3.15/library/intro.html#availability): FreeBSD \>= 14.2.214215Добавлено в версии 3.15.216217#### `resource.RLIMIT_THREADS`218219Максимальное количество потоков, которое может создать каждый процесс.220221[Доступность](https://python-all.ru/3.15/library/intro.html#availability): AIX.222223Добавлено в версии 3.15.224225#### `resource.RLIMIT_UMTXP`226227Ограничение на количество объектов библиотеки потоков Posix с разделением между процессами, выделяемых по идентификатору пользователя.228229[Доступность](https://python-all.ru/3.15/library/intro.html#availability): FreeBSD \>= 11.230231Добавлено в версии 3.15.232233## Использование ресурсов234235Эти функции используются для получения информации об использовании ресурсов:236237#### `resource.getrusage(who)`238239Эта функция возвращает объект, описывающий ресурсы, потребляемые либо текущим процессом, либо его потомками, в зависимости от параметра *who*. Параметр *who* должен быть задан с помощью одной из констант `RUSAGE_*`, описанных ниже.240241Простой пример:242243```python244from resource import *245import time246247# задача, не загружающая процессор248time.sleep(3)249print(getrusage(RUSAGE_SELF))250251# задача, загружающая процессор252for i in range(10 ** 8):253   _ = 1 + 1254print(getrusage(RUSAGE_SELF))255```256257Поля возвращаемого значения описывают, как использовался тот или иной системный ресурс, например, количество времени, проведённого в пользовательском режиме, или количество раз, когда процесс был выгружен из основной памяти. Некоторые значения зависят от интервала системного тика, например, объём памяти, используемой процессом.258259Для обратной совместимости возвращаемое значение также доступно в виде кортежа из 16 элементов.260261Поля `ru_utime` и `ru_stime` возвращаемого значения – это числа с плавающей запятой, представляющие количество времени, затраченного на выполнение в пользовательском режиме и количество времени, затраченного на выполнение в системном режиме, соответственно. Остальные значения – целые числа. За подробной информацией об этих значениях обратитесь к man-странице *[getrusage(2)](https://python-all.ru/3.15/library/resource.html)*. Краткая сводка представлена ниже:262263| Индекс | Поле | Ресурс |264| --- | --- | --- |265| `0` | `ru_utime` | время в пользовательском режиме (секунды, float) |266| `1` | `ru_stime` | время в системном режиме (секунды, float) |267| `2` | `ru_maxrss` | максимальный размер резидентного набора |268| `3` | `ru_ixrss` | размер разделяемой памяти |269| `4` | `ru_idrss` | размер неразделяемой памяти |270| `5` | `ru_isrss` | размер неразделяемого стека |271| `6` | `ru_minflt` | страничные сбои без ввода-вывода |272| `7` | `ru_majflt` | страничные сбои, требующие ввода-вывода |273| `8` | `ru_nswap` | количество выгрузок на диск |274| `9` | `ru_inblock` | блокирующие операции ввода |275| `10` | `ru_oublock` | блокирующие операции вывода |276| `11` | `ru_msgsnd` | отправленные сообщения |277| `12` | `ru_msgrcv` | полученные сообщения |278| `13` | `ru_nsignals` | полученные сигналы |279| `14` | `ru_nvcsw` | добровольные переключения контекста |280| `15` | `ru_nivcsw` | вынужденные переключения контекста |281282Эта функция возбудит исключение [`ValueError`](https://python-all.ru/3.15/library/exceptions.html#ValueError), если указан недопустимый параметр *who*. Также в нестандартных ситуациях может быть возбуждено исключение [`error`](https://python-all.ru/3.15/library/resource.html#resource.error).283284#### `resource.getpagesize()`285286Возвращает количество байт в системной странице. (Оно может не совпадать с размером аппаратной страницы.)287288Следующие символы `RUSAGE_*` передаются в функцию [`getrusage()`](https://python-all.ru/3.15/library/resource.html#resource.getrusage), чтобы указать, для каких процессов следует предоставить информацию.289290#### `resource.RUSAGE_SELF`291292Передаётся в [`getrusage()`](https://python-all.ru/3.15/library/resource.html#resource.getrusage) для запроса ресурсов, потребляемых вызывающим процессом, что представляет собой сумму ресурсов, использованных всеми потоками процесса.293294#### `resource.RUSAGE_CHILDREN`295296Передаётся в [`getrusage()`](https://python-all.ru/3.15/library/resource.html#resource.getrusage) для запроса ресурсов, потреблённых дочерними процессами вызывающего процесса, которые были завершены и дожданы.297298#### `resource.RUSAGE_BOTH`299300Передаётся в [`getrusage()`](https://python-all.ru/3.15/library/resource.html#resource.getrusage) для запроса ресурсов, потреблённых как текущим процессом, так и дочерними. Может быть недоступна на некоторых системах.301302#### `resource.RUSAGE_THREAD`303304Передаётся в [`getrusage()`](https://python-all.ru/3.15/library/resource.html#resource.getrusage) для запроса ресурсов, потреблённых текущим потоком. Может быть недоступна на некоторых системах.305306Добавлено в версии 3.2.307