Spec-Zone.ru › Python 3.10

resource — Информация об использовании ресурсов

Этот модуль предоставляет базовые механизмы для измерения и управления системными ресурсами, используемыми программой.

Символьные константы используются для указания конкретных системных ресурсов и запроса информации об использовании текущего процесса или его дочерних процессов.

При сбое системного вызова генерируется исключение OSError.

exception resource.error

Устаревшее алиас для OSError.

Изменено в версии 3.3: В соответствии с PEP 3151, этот класс стал алиасом для OSError.

Пределы ресурсов

Использование ресурсов может быть ограничено с помощью функции setrlimit(), описанной ниже. Каждый ресурс контролируется парой ограничений: мягким и жёстким пределом. Мягкий предел — это текущий предел, который может изменяться процессом со временем. Мягкий предел никогда не может превышать жёсткий предел. Жёсткий предел может быть уменьшен до любого значения, большего, чем мягкий предел, но не увеличен. (Только процессы с эффективным идентификатором пользователя суперпользователя могут повышать жёсткий предел.)

Конкретные ресурсы, которые могут быть ограничены, зависят от операционной системы. Они описаны в справочной странице getrlimit(2). Перечисленные ниже ресурсы поддерживаются, когда это поддерживает основная операционная система; ресурсы, которые не могут быть проверены или контролируются операционной системой, в этом модуле для таких платформ не определены.

resource.RLIM_INFINITY

Константа, используемая для представления предела для неограниченного ресурса.

resource.getrlimit(resource)

Возвращает кортеж (soft, hard) с текущими мягкими и жёсткими пределами ресурса resource. Вызывает ValueError, если указан недопустимый ресурс, или error, если системный вызов по неизвестной причине завершился неудачей.

resource.setrlimit(resource, limits)

Устанавливает новые пределы потребления ресурса resource. Аргумент limits должен быть кортежем (soft, hard) из двух целых чисел, описывающих новые пределы. Значение RLIM_INFINITY может быть использовано для запроса неограниченного предела.

Вызывает ValueError, если указан недопустимый ресурс, если новый мягкий предел превышает жёсткий предел или если процесс пытается увеличить свой жёсткий предел. Указание предела RLIM_INFINITY, когда жёсткий или системный предел для данного ресурса не является неограниченным, приведёт к ValueError. Процесс с эффективным идентификатором пользователя суперпользователя может запросить любое допустимое значение предела, включая неограниченное, но ValueError всё равно будет вызвано, если запрашиваемый предел превышает наложенное системой ограничение.

setrlimit также может вызвать error, если системный вызов завершится неудачей.

VxWorks поддерживает только установку RLIMIT_NOFILE.

Вызывает событие аудита аудита resource.setrlimit с аргументами resource, limits.

resource.prlimit(pid, resource[, limits])

Объединяет setrlimit() и getrlimit() в одной функции и поддерживает получение и установку пределов ресурсов произвольного процесса. Если pid равно 0, то вызов применяется к текущему процессу. resource и limits имеют такое же значение, как и в setrlimit(), за исключением того, что limits является необязательным.

Когда limits не указан, функция возвращает предел ресурса resource процесса pid. Когда limits указан, предел ресурса resource процесса устанавливается, и возвращается предыдущий предел ресурса.

Вызывает ProcessLookupError, когда процесс pid не найден, и PermissionError, когда у пользователя нет CAP_SYS_RESOURCE для процесса.

Вызывает событие аудита аудита resource.prlimit с аргументами pid, resource, limits.

Доступность: Linux 2.6.36 или более поздняя версия с glibc 2.13 или более поздней версией.

Введено в версии 3.4.

Эти символы определяют ресурсы, чьё потребление может контролироваться с помощью функций setrlimit() и getrlimit(), описанных ниже. Значения этих символов — это точно те константы, которые используются программами на C.

Страница справочника Unix для getrlimit(2) перечисляет доступные ресурсы. Обратите внимание, что не все системы используют один и тот же символ или значение для обозначения одного и того же ресурса. Этот модуль не пытается скрыть различия между платформами — символы, не определённые для платформы, не будут доступны из этого модуля на этой платформе.

resource.RLIMIT_CORE

Максимальный размер (в байтах) файла ядра, который может создать текущий процесс. Это может привести к созданию частичного файла ядра, если для полного представления образа процесса потребуется файл ядра большего размера.

resource.RLIMIT_CPU

Максимальное время процессора (в секундах), которое может использовать процесс. Если этот предел превышен, процессу отправляется сигнал SIGXCPU (см. документацию модуля signal для информации о том, как перехватить этот сигнал и выполнить полезное действие, например, сбросить открытые файлы на диск).

resource.RLIMIT_FSIZE

Максимальный размер файла, который может создать процесс.

resource.RLIMIT_DATA

Максимальный размер (в байтах) кучи процесса.

resource.RLIMIT_STACK

Максимальный размер (в байтах) стека вызовов для текущего процесса. Это влияет только на стек главного потока в многопоточном процессе.

resource.RLIMIT_RSS

Максимальный размер набора резидентных страниц, который должен быть доступен процессу.

resource.RLIMIT_NPROC

Максимальное количество процессов, которые может создать текущий процесс.

resource.RLIMIT_NOFILE

Максимальное количество дескрипторов открытых файлов для текущего процесса.

resource.RLIMIT_OFILE

Имя BSD для RLIMIT_NOFILE.

resource.RLIMIT_MEMLOCK

Максимальный объём адресного пространства, который может быть заблокирован в памяти.

resource.RLIMIT_VMEM

Наибольшая область отображённой памяти, которую может занимать процесс.

resource.RLIMIT_AS

Максимальная область (в байтах) адресного пространства, которую может занимать процесс.

resource.RLIMIT_MSGQUEUE

Количество байтов, которое может быть выделено для очередей сообщений POSIX.

Доступность: Linux 2.6.8 или более поздняя версия.

Введено в версии 3.4.

resource.RLIMIT_NICE

Потолок для уровня приоритета процесса (вычисляется как 20 - rlim_cur).

Доступность: Linux 2.6.12 или более поздняя версия.

Введено в версии 3.4.

resource.RLIMIT_RTPRIO

Потолок приоритета реального времени.

Доступность: Linux 2.6.12 или более поздняя версия.

Введено в версии 3.4.

resource.RLIMIT_RTTIME

Предел времени (в микросекундах) по времени процессора, которое процесс может потратить на планирование в режиме реального времени без выполнения блокирующего системного вызова.

Доступность: Linux 2.6.25 или более поздняя версия.

Введено в версии 3.4.

resource.RLIMIT_SIGPENDING

Количество сигналов, которые может поставить в очередь процесс.

Доступность: Linux 2.6.8 или более поздняя версия.

Введено в версии 3.4.

END_OF_DOCUMENT_MARKER
resource.RLIMIT_SBSIZE

Максимальный размер (в байтах) буфера сокета для данного пользователя. Это ограничение влияет на объем сетевой памяти и, следовательно, на количество mbuf, которые может удерживать данный пользователь в любой момент.

Доступность: FreeBSD 9 и более поздние версии.

Введено в версии 3.4.

resource.RLIMIT_SWAP

Максимальный размер (в байтах) пространства подкачки, которое может быть зарезервировано или использовано всеми процессами данного пользователя. Это ограничение применяется только в том случае, если бит 1 системного параметра vm.overcommit установлен. Подробное описание этого системного параметра см. в tuning(7).

Доступность: FreeBSD 9 и более поздние версии.

Введено в версии 3.4.

resource.RLIMIT_NPTS

Максимальное количество псевдотерминалов, созданных данным пользователем.

Доступность: FreeBSD 9 и более поздние версии.

Введено в версии 3.4.

resource.RLIMIT_KQUEUES

Максимальное количество kqueues, которое разрешено создать данному пользователю.

Доступность: FreeBSD 11 и более поздние версии.

Введено в версии 3.10.

Использование ресурсов

Эти функции используются для получения информации об использовании ресурсов:

resource.getrusage(who)

Эта функция возвращает объект, описывающий ресурсы, потребляемые текущим процессом или его дочерними процессами, в зависимости от параметра who. Параметр who должен быть указан с использованием одного из RUSAGE_* констант, описанных ниже.

Простой пример:

from resource import *
import time

# a non CPU-bound task
time.sleep(3)
print(getrusage(RUSAGE_SELF))

# a CPU-bound task
for i in range(10 ** 8):
   _ = 1 + 1
print(getrusage(RUSAGE_SELF))

Поля возвращаемого значения описывают, как используется тот или иной системный ресурс, например, сколько времени процесс выполнялся в пользовательском режиме или сколько раз процесс был удалён из основной памяти. Некоторые значения зависят от внутреннего тактового интервала, например, от объёма памяти, используемой процессом.

Для обеспечения обратной совместимости возвращаемое значение также доступно как кортеж из 16 элементов.

Поля ru_utime и ru_stime возвращаемого значения представляют собой числа с плавающей точкой, соответственно, отражающие количество времени, затраченное на выполнение в пользовательском режиме, и в системном режиме. Остальные значения — целые числа. Обратитесь к справочной странице getrusage(2) для получения подробной информации об этих значениях. Здесь представлен краткий обзор:

Индекс

Поле

Ресурс

0

ru_utime

время в пользовательском режиме (дробное количество секунд)

1

ru_stime

время в системном режиме (дробное количество секунд)

2

ru_maxrss

максимальный размер набора резидентных страниц

3

ru_ixrss

размер общей памяти

4

ru_idrss

размер несовместной памяти

5

ru_isrss

размер несовместного стека

6

ru_minflt

страничные ошибки, не требующие операций ввода-вывода

7

ru_majflt

страничные ошибки, требующие операций ввода-вывода

8

ru_nswap

количество обменов на диск

9

ru_inblock

операции блока ввода

10

ru_oublock

операции блока вывода

11

ru_msgsnd

отправленные сообщения

12

ru_msgrcv

полученные сообщения

13

ru_nsignals

полученные сигналы

14

ru_nvcsw

добровольные переключения контекстов

15

ru_nivcsw

принудительные переключения контекстов

Эта функция вызывает исключение ValueError, если параметр who некорректен. Также в необычных ситуациях она может вызвать исключение error.

resource.getpagesize()

Возвращает количество байтов в системной странице. (Это необязательно должно совпадать с размером страницы аппаратного обеспечения.)

Следующие RUSAGE_* символы передаются функции getrusage() для указания, информация о каких процессах должна быть получена.

resource.RUSAGE_SELF

Передайте в getrusage() для запроса ресурсов, потреблённых вызывающим процессом, что является суммой ресурсов, использованных всеми потоками в этом процессе.

resource.RUSAGE_CHILDREN

Передайте в getrusage() для запроса ресурсов, потреблённых дочерними процессами вызывающего процесса, которые были завершены и для которых ожидание завершения завершено.

resource.RUSAGE_BOTH

Передайте в getrusage() для запроса ресурсов, потреблённых как текущим процессом, так и дочерними процессами. Может быть недоступен на всех системах.

resource.RUSAGE_THREAD

Передайте в getrusage() для запроса ресурсов, потреблённых текущим потоком. Может быть недоступен на всех системах.

Введено в версии 3.2.

© 2001–2023 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.10/library/resource.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API