Spec-Zone.ru › Python 3.11

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

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

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

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

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

exception resource.error

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

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

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

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

Конкретные ресурсы, которые могут быть ограничены, зависят от системы. Они описаны в справочном руководстве 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. Процесс с эффективным UID суперпользователя может запросить любое допустимое значение предела, включая неограниченное, но 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

Предел для уровня 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

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

Доступность: 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–2023 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.11/library/resource.html

Spec-Zone.ru

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