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


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

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

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

exception resource.error

Устаревший алиас OSError.

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

Лимиты ресурсов

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

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

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 super-пользователя может просить любой действительный предел значение, включая неограниченный, но 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

Потолок для хорошего уровня процесса (рассчитывается как 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 9 или новее.

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

resource.RLIMIT_SWAP

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

Доступность: FreeBSD 9 или новее.

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

resource.RLIMIT_NPTS

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

Доступность: FreeBSD 9 или новее.

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

Использование ресурсов

Эти функции используются для получения информации об использовании ресурсов:

resource.getrusage(who)

Возвращает функции объект, который описывает ресурсы, потребляемые или текущим процессом или его детьми, как определено параметром who. Параметр who должен быть указан с помощью одной из констант RUSAGE_*, описанных ниже.

Простой пример:

from resource import *
import time

# не связанная с процессором задача
time.sleep(3)
print(getrusage(RUSAGE_SELF))

# задача, связанная с процессором
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, если указан недопустимый параметр кто. Это может также поднять исключение error при необычных обстоятельствах.

resource.getpagesize()

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

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

resource.RUSAGE_SELF

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

resource.RUSAGE_CHILDREN

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

resource.RUSAGE_BOTH

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

resource.RUSAGE_THREAD

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

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