Spec-Zone.ru › Python 3.8

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

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

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

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

exception resource.error

Устаревшее имя для OSError.

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

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

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

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

END_OF_DOCUMENT_MARKER
resource.RLIMIT_SBSIZE

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

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

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

resource.RLIMIT_SWAP

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

# 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–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.8/library/resource.html

Spec-Zone.ru

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