Spec-Zone.ru › Python 3.13

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

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

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

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

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

exception resource.error

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

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

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

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

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

resource.RLIM_INFINITY

Константа, обозначающая неограниченный ресурс.

resource.getrlimit(resource)

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

resource.setrlimit(resource, limits)

Устанавливает новые ограничения на потребление ресурса. Аргумент 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 не задан, функция возвращает ограничение для ресурса процесса pid. Если аргумент limits задан, ограничение для ресурса процесса устанавливается, а прежнее ограничение для ресурса возвращается.

Вызывает 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

Максимальный размер (в байтах) файла core, который может создать текущий процесс. Если для сохранения всего образа процесса потребуется файл большего размера, это может привести к созданию неполного файла 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

Максимальная область отображённой памяти, которую может занимать процесс. Обычно является псевдонимом для RLIMIT_AS.

Доступность: Solaris, FreeBSD, NetBSD.

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.

resource.RLIMIT_SIGPENDING

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

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

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

resource.RLIMIT_SBSIZE

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

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

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

resource.RLIMIT_SWAP

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

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

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

resource.RLIMIT_NPTS

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

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

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

resource.RLIMIT_KQUEUES

Максимальное число kqueue, которые разрешено создавать этому идентификатору пользователя.

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

Spec-Zone.ru

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