Spec-Zone.ru › Python 3.14

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) с текущими мягким и жёстким ограничениями для 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 процесса устанавливается, а прежнее ограничение ресурса возвращается.

Если процесс с идентификатором pid не найден, возникает исключение ProcessLookupError; если у пользователя нет CAP_SYS_RESOURCE для этого процесса, возникает исключение PermissionError.

Вызывает событие аудита 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

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

Доступность: 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

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

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

resource.getpagesize()

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

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

resource.RUSAGE_SELF

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

resource.RUSAGE_CHILDREN

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

resource.RUSAGE_BOTH

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

resource.RUSAGE_THREAD

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

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

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

Spec-Zone.ru

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