Spec-Zone.ru › Python 3.13

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

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

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

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

При ошибке системного вызова поднимается OSError.

exception resource.error

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

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

END_OF_DOCUMENT_MARKER

Ограничения ресурсов

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

Конкретные ресурсы, которые могут быть ограничены, зависят от системы. Они описаны в справочной странице 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.

END_OF_DOCUMENT_MARKER
resource.RLIMIT_RTTIME

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

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

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

resource.RLIMIT_SIGPENDING

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

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

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

resource.RLIMIT_SBSIZE

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

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

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

resource.RLIMIT_SWAP

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

Доступность: 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.13/library/resource.html

Spec-Zone.ru

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