Spec-Zone.ru › Python 3.12

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

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

Доступность: Unix, не Emscripten, не WASI.

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

При неудачном вызове системы поднимается OSError.

exception resource.error

Устаревший псевдоним OSError.

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

END_OF_DOCUMENT_MARKER

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

Использование ресурсов может быть ограничено с помощью функции 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

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

Доступность: FreeBSD >= 11.

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.

END_OF_DOCUMENT_MARKER
resource.RLIMIT_SIGPENDING

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

Доступность: Linux >= 2.6.8.

Добавлен в версии 3.4.

resource.RLIMIT_SBSIZE

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

Доступность: FreeBSD.

Добавлен в версии 3.4.

resource.RLIMIT_SWAP

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

Доступность: FreeBSD.

Добавлен в версии 3.4.

resource.RLIMIT_NPTS

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

Доступность: FreeBSD.

Добавлен в версии 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–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.12/library/resource.html

Spec-Zone.ru

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