Spec-Zone.ru › Python 3.12

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

Максимальный объем отображенной памяти, который может занимать процесс.

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

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.

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

resource.RLIMIT_SWAP

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

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

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

resource.RLIMIT_NPTS

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

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

Добавлено в версии 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–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