В материале представлены константы и функции модуля resource
, которые используются для получения информации об использовании ресурсов используемой оперативной системы.
resource.getrusage()
возвращает ресурсы, потребляемые текущим или дочерними процессами,resource.getpagesize()
возвращает количество байтов системной страницы,resource.getrusage()
:resource.RUSAGE_SELF
ресурсы, потребляемые вызывающим процессом,resource.RUSAGE_CHILDREN
ресурсы, потребляемые дочерними процессами вызывающего процесса,resource.RUSAGE_BOTH
ресурсы, потребляемые как текущим процессом и дочерними процессами,resource.RUSAGE_THREAD
ресурсы, потребляемые текущим потоком.resource.getrusage(who)
:Функция resource.getrusage()
возвращает объект, описывающий ресурсы, потребляемые либо текущим процессом, либо его дочерними процессами, как указано в аргументе who
.
Аргумент who
должен быть указан с использованием одной из констант resource.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
(значения float
) представляют количество времени, затраченное на выполнение в пользовательском режиме, и количество времени, затраченное на выполнение в системном режиме, соответственно. Остальные значения являются целыми числами.
Дополнительно смотрите справочную страницу $ man getrusage
, что-бы узнать подробную информацию об этих значениях.
Краткое содержание возвращаемых значений функцией resource.getrusage()
:
Индекс | Поле | Ресурс |
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 | непроизвольное переключение контекста |
Функция resource.getrusage()
вызовет ошибку ValueError
, если указан неверный аргумент who
. Неверный аргумент who
также может вызвать исключение OSError
в необычных обстоятельствах.
resource.getpagesize()
:Функция resource.getpagesize()
возвращает количество байтов системной страницы.
Возвращаемое значение не обязательно должно совпадать с аппаратным размером страницы.
resource.getrusage()
.Чтобы указать, для каких процессов должна быть предоставлена информация в функцию resource.getrusage()
необходимо передать следующие символьные константы: resource.RUSAGE_*
(описание констант ниже).
resource.RUSAGE_SELF
:Константа resource.RUSAGE_SELF
запрашивает ресурсы, потребляемые вызывающим процессом, что представляет собой сумму ресурсов, используемых всеми потоками в процессе.
resource.RUSAGE_CHILDREN
:Константа resource.RUSAGE_CHILDREN
запрашивает ресурсы, потребляемые дочерними процессами вызывающего процесса, которые были завершены и ожидали.
resource.RUSAGE_BOTH
:Константа resource.RUSAGE_BOTH
запрашивает ресурсы, потребляемые как текущим процессом, так и дочерними процессами. Может быть недоступно во всех системах.
resource.RUSAGE_THREAD
:Константа resource.RUSAGE_THREAD
запрашивает ресурсы, потребляемые текущим потоком. Может быть недоступно во всех системах.