:mod:`!resource` --- Resource usage information
===============================================

.. module:: resource
   :synopsis: An interface to provide resource usage information on the current process.

--------------

This module provides basic mechanisms for measuring and controlling system
resources utilized by a program.

.. availability:: Unix, not WASI.

Symbolic constants are used to specify particular system resources and to
request usage information about either the current process or its children.

An :exc:`OSError` is raised on syscall failure.


.. exception:: error

   A deprecated alias of :exc:`OSError`.

   .. versionchanged:: 3.3
      Following :pep:`3151`, this class was made an alias of :exc:`OSError`.


Resource Limits
---------------

Resources usage can be limited using the :func:`setrlimit` function described
below. Each resource is controlled by a pair of limits: a soft limit and a hard
limit. The soft limit is the current limit, and may be lowered or raised by a
process over time. The soft limit can never exceed the hard limit. The hard
limit can be lowered to any value greater than the soft limit, but not raised.
(Only processes with the effective UID of the super-user can raise a hard
limit.)

The specific resources that can be limited are system dependent. They are
described in the :manpage:`getrlimit(2)` man page.  The resources listed below
are supported when the underlying operating system supports them; resources
which cannot be checked or controlled by the operating system are not defined in
this module for those platforms.


.. data:: RLIM_INFINITY

   Constant used to represent the limit for an unlimited resource.

   .. versionchanged:: 3.15
      It is now always positive.
      Previously, it could be negative, such as -1 or -3.


.. data:: RLIM_SAVED_CUR
.. data:: RLIM_SAVED_MAX

   Constants used to represent the soft and hard limit values if they
   cannot be represented in the ``rlim_t`` value in C.
   Can be equal to :data:`RLIM_INFINITY`.

   .. versionadded:: 3.15


.. function:: getrlimit(resource)

   Returns a tuple ``(soft, hard)`` with the current soft and hard limits of
   *resource*. Raises :exc:`ValueError` if an invalid resource is specified, or
   :exc:`error` if the underlying system call fails unexpectedly.


.. function:: setrlimit(resource, limits)

   Sets new limits of consumption of *resource*. The *limits* argument must be a
   tuple ``(soft, hard)`` of two integers describing the new limits. A value of
   :const:`~resource.RLIM_INFINITY` can be used to request a limit that is
   unlimited.

   Raises :exc:`ValueError` if an invalid resource is specified, if the new soft
   limit exceeds the hard limit, or if a process tries to raise its hard limit.
   Specifying a limit of :const:`~resource.RLIM_INFINITY` when the hard or
   system limit for that resource is not unlimited will result in a
   :exc:`ValueError`.  A process with the effective UID of super-user can
   request any valid limit value, including unlimited, but :exc:`ValueError`
   will still be raised if the requested limit exceeds the system imposed
   limit.

   ``setrlimit`` may also raise :exc:`error` if the underlying system call
   fails.

   VxWorks only supports setting :const:`RLIMIT_NOFILE`.

   .. audit-event:: resource.setrlimit resource,limits resource.setrlimit


.. function:: prlimit(pid, resource[, limits])

   Combines :func:`setrlimit` and :func:`getrlimit` in one function and
   supports to get and set the resources limits of an arbitrary process. If
   *pid* is 0, then the call applies to the current process. *resource* and
   *limits* have the same meaning as in :func:`setrlimit`, except that
   *limits* is optional.

   When *limits* is not given the function returns the *resource* limit of the
   process *pid*. When *limits* is given the *resource* limit of the process is
   set and the former resource limit is returned.

   Raises :exc:`ProcessLookupError` when *pid* can't be found and
   :exc:`PermissionError` when the user doesn't have ``CAP_SYS_RESOURCE`` for
   the process.

   .. audit-event:: resource.prlimit pid,resource,limits resource.prlimit

   .. availability:: Linux >= 2.6.36 with glibc >= 2.13.

   .. versionadded:: 3.4


These symbols define resources whose consumption can be controlled using the
:func:`setrlimit` and :func:`getrlimit` functions described below. The values of
these symbols are exactly the constants used by C programs.

The Unix man page for :manpage:`getrlimit(2)` lists the available resources.
Note that not all systems use the same symbol or same value to denote the same
resource.  This module does not attempt to mask platform differences --- symbols
not defined for a platform will not be available from this module on that
platform.


.. data:: RLIMIT_CORE

   The maximum size (in bytes) of a core file that the current process can create.
   This may result in the creation of a partial core file if a larger core would be
   required to contain the entire process image.


.. data:: RLIMIT_CPU

   The maximum amount of processor time (in seconds) that a process can use. If
   this limit is exceeded, a :const:`~signal.SIGXCPU` signal is sent to the process. (See
   the :mod:`signal` module documentation for information about how to catch this
   signal and do something useful, e.g. flush open files to disk.)


.. data:: RLIMIT_FSIZE

   The maximum size of a file which the process may create.


.. data:: RLIMIT_DATA

   The maximum size (in bytes) of the process's heap.


.. data:: RLIMIT_STACK

   The maximum size (in bytes) of the call stack for the current process.  This only
   affects the stack of the main thread in a multi-threaded process.


.. data:: RLIMIT_RSS

   The maximum resident set size that should be made available to the process.


.. data:: RLIMIT_NPROC

   The maximum number of processes the current process may create.


.. data:: RLIMIT_NOFILE

   The maximum number of open file descriptors for the current process.


.. data:: RLIMIT_OFILE

   The BSD name for :const:`RLIMIT_NOFILE`.


.. data:: RLIMIT_MEMLOCK

   The maximum address space which may be locked in memory.


.. data:: RLIMIT_VMEM

   The largest area of mapped memory which the process may occupy.
   Usually an alias of :const:`RLIMIT_AS`.

   .. availability:: Solaris, FreeBSD, NetBSD.


.. data:: RLIMIT_AS

   The maximum area (in bytes) of address space which may be taken by the process.


.. data:: RLIMIT_MSGQUEUE

   The number of bytes that can be allocated for POSIX message queues.

   .. availability:: Linux >= 2.6.8.

   .. versionadded:: 3.4


.. data:: RLIMIT_NICE

   The ceiling for the process's nice level (calculated as 20 - rlim_cur).

   .. availability:: Linux >= 2.6.12.

   .. versionadded:: 3.4


.. data:: RLIMIT_RTPRIO

   The ceiling of the real-time priority.

   .. availability:: Linux >= 2.6.12.

   .. versionadded:: 3.4


.. data:: RLIMIT_RTTIME

   The time limit (in microseconds) on CPU time that a process can spend
   under real-time scheduling without making a blocking syscall.

   .. availability:: Linux >= 2.6.25.

   .. versionadded:: 3.4


.. data:: RLIMIT_SIGPENDING

   The number of signals which the process may queue.

   .. availability:: Linux >= 2.6.8.

   .. versionadded:: 3.4


.. data:: RLIMIT_SBSIZE

   The maximum size (in bytes) of socket buffer usage for this user.
   This limits the amount of network memory, and hence the amount of mbufs,
   that this user may hold at any time.

   .. availability:: FreeBSD, NetBSD.

   .. versionadded:: 3.4


.. data:: RLIMIT_SWAP

   The maximum size (in bytes) of the swap space that may be reserved or
   used by all of this user id's processes.
   This limit is enforced only if bit 1 of the vm.overcommit sysctl is set.
   Please see
   `tuning(7) <https://man.freebsd.org/cgi/man.cgi?query=tuning&sektion=7>`__
   for a complete description of this sysctl.

   .. availability:: FreeBSD >= 8.

   .. versionadded:: 3.4


.. data:: RLIMIT_NPTS

   The maximum number of pseudo-terminals created by this user id.

   .. availability:: FreeBSD >= 8.

   .. versionadded:: 3.4


.. data:: RLIMIT_KQUEUES

   The maximum number of kqueues this user id is allowed to create.

   .. availability:: FreeBSD >= 11.

   .. versionadded:: 3.10


.. data:: RLIMIT_NTHR

   The maximum number of threads for this user id, not counting the main
   and kernel threads.

   .. availability:: NetBSD >= 7.0.

   .. versionadded:: 3.15


.. data:: RLIMIT_PIPEBUF

   The maximum total size of in-kernel buffers for bi-directional pipes/fifos
   that this user id is allowed to consume.

   .. availability:: FreeBSD >= 14.2.

   .. versionadded:: 3.15


.. data:: RLIMIT_THREADS

   The maximum number of threads each process can create.

   .. availability:: AIX.

   .. versionadded:: 3.15


.. data:: RLIMIT_UMTXP

   The limit of the number of process-shared Posix thread library objects
   allocated by user id.

   .. availability:: FreeBSD >= 11.

   .. versionadded:: 3.15


Resource Usage
--------------

These functions are used to retrieve resource usage information:


.. function:: getrusage(who)

   This function returns an object that describes the resources consumed by either
   the current process or its children, as specified by the *who* parameter.  The
   *who* parameter should be specified using one of the :const:`!RUSAGE_\*`
   constants described below.

   A simple example::

      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))

   The fields of the return value each describe how a particular system resource
   has been used, e.g. amount of time spent running in user mode or number of times
   the process was swapped out of main memory. Some values are dependent on the
   clock tick interval, e.g. the amount of memory the process is using.

   For backward compatibility, the return value is also accessible as a tuple of 16
   elements.

   The fields :attr:`!ru_utime` and :attr:`!ru_stime` of the return value are
   floating-point values representing the amount of time spent executing in user
   mode and the amount of time spent executing in system mode, respectively. The
   remaining values are integers. Consult the :manpage:`getrusage(2)` man page for
   detailed information about these values. A brief summary is presented here:

   +--------+----------------------+---------------------------------------+
   | Index  | Field                | Resource                              |
   +========+======================+=======================================+
   | ``0``  | :attr:`!ru_utime`    | time in user mode (float seconds)     |
   +--------+----------------------+---------------------------------------+
   | ``1``  | :attr:`!ru_stime`    | time in system mode (float seconds)   |
   +--------+----------------------+---------------------------------------+
   | ``2``  | :attr:`!ru_maxrss`   | maximum resident set size             |
   +--------+----------------------+---------------------------------------+
   | ``3``  | :attr:`!ru_ixrss`    | shared memory size                    |
   +--------+----------------------+---------------------------------------+
   | ``4``  | :attr:`!ru_idrss`    | unshared memory size                  |
   +--------+----------------------+---------------------------------------+
   | ``5``  | :attr:`!ru_isrss`    | unshared stack size                   |
   +--------+----------------------+---------------------------------------+
   | ``6``  | :attr:`!ru_minflt`   | page faults not requiring I/O         |
   +--------+----------------------+---------------------------------------+
   | ``7``  | :attr:`!ru_majflt`   | page faults requiring I/O             |
   +--------+----------------------+---------------------------------------+
   | ``8``  | :attr:`!ru_nswap`    | number of swap outs                   |
   +--------+----------------------+---------------------------------------+
   | ``9``  | :attr:`!ru_inblock`  | block input operations                |
   +--------+----------------------+---------------------------------------+
   | ``10`` | :attr:`!ru_oublock`  | block output operations               |
   +--------+----------------------+---------------------------------------+
   | ``11`` | :attr:`!ru_msgsnd`   | messages sent                         |
   +--------+----------------------+---------------------------------------+
   | ``12`` | :attr:`!ru_msgrcv`   | messages received                     |
   +--------+----------------------+---------------------------------------+
   | ``13`` | :attr:`!ru_nsignals` | signals received                      |
   +--------+----------------------+---------------------------------------+
   | ``14`` | :attr:`!ru_nvcsw`    | voluntary context switches            |
   +--------+----------------------+---------------------------------------+
   | ``15`` | :attr:`!ru_nivcsw`   | involuntary context switches          |
   +--------+----------------------+---------------------------------------+

   This function will raise a :exc:`ValueError` if an invalid *who* parameter is
   specified. It may also raise :exc:`error` exception in unusual circumstances.


.. function:: getpagesize()

   Returns the number of bytes in a system page. (This need not be the same as the
   hardware page size.)

The following :const:`!RUSAGE_\*` symbols are passed to the :func:`getrusage`
function to specify which processes information should be provided for.


.. data:: RUSAGE_SELF

   Pass to :func:`getrusage` to request resources consumed by the calling
   process, which is the sum of resources used by all threads in the process.


.. data:: RUSAGE_CHILDREN

   Pass to :func:`getrusage` to request resources consumed by child processes
   of the calling process which have been terminated and waited for.


.. data:: RUSAGE_BOTH

   Pass to :func:`getrusage` to request resources consumed by both the current
   process and child processes.  May not be available on all systems.


.. data:: RUSAGE_THREAD

   Pass to :func:`getrusage` to request resources consumed by the current
   thread.  May not be available on all systems.

   .. versionadded:: 3.2
