35.11. resource - 资源使用信息

该模块提供用于测量和控制程序利用的系统资源的基本机制。

符号常量用于指定特定的系统资源,并请求关于当前进程或其子进程的使用信息。

在syscall失败时引发OSError

exception resource.error

已弃用的OSError别名。

在版本3.3中已更改: PEP 3151之后,此类被设为OSError的别名。

35.11.1. Resource Limits

可以使用下面描述的setrlimit()函数限制资源使用。每个资源由一对限制控制:软限制和硬限制。软限制是电流限制,并且可以随着时间过程由过程降低或升高。软限制不能超过硬限制。硬限制可以降低到大于软限制的任何值,但不能提高。(只有具有超级用户的有效UID的进程才能引入硬限制。)

可以限制的具体资源是系统相关的。它们在getrlimit(2)手册页中描述。下面列出的资源在底层操作系统支持时支持;不能由操作系统检查或控制的资源在本模块中没有为这些平台定义。

resource.RLIM_INFINITY

常量用于表示无限资源的限制。

resource.getrlimit(resource)

使用资源的当前软和硬限制返回元组(软, 硬) 如果底层系统调用意外失败,则引发ValueError(如果指定了无效资源)或error

resource.setrlimit(resource, limits)

设置资源的新限制。limits参数必须是描述新限制的两个整数的元组(soft, hard) RLIM_INFINITY可用于请求无限制的限制。

如果指定了无效的资源,如果新的软限制超过硬限制,或者如果进程尝试引入其硬限制,则引发ValueError当该资源的硬性或系统限制不是无限制时,指定RLIM_INFINITY的限制将导致ValueError具有超级用户的有效UID的进程可以请求任何有效的限制值,包括无限的,但是如果所请求的限制超过系统强加的限制,则仍然会引发ValueError

如果底层系统调用失败,setrlimit也可能引发error

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

在一个函数中组合setrlimit()getrlimit(),并支持获取和设置任意进程的资源限制。如果pid为0,则调用将应用于当前进程。资源限制的含义与setrlimit()中相同,除了限制是可选的。

当未给出limit时,函数返回进程pid资源限制。当给定限制时,设置进程的资源限制,并返回前一个资源限制。

当用户没有用于进程的CAP_SYS_RESOURCE时,当无法找到pidPermissionError时引发ProcessLookupError

可用性:Linux 2.6.36或更高版本,使用glibc 2.13或更高版本

版本3.4中的新功能。

这些符号定义可以使用下面描述的setrlimit()getrlimit()函数控制其消耗的资源。这些符号的值正是C程序使用的常量。

getrlimit(2)的Unix手册页列出了可用的资源。请注意,并非所有系统都使用相同的符号或相同的值来表示相同的资源。此模块不会尝试屏蔽平台差异 - 未为平台定义的符号将无法从该平台上的此模块获取。

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

RLIMIT_NOFILE的BSD名称。

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

进程可以在实时调度下花费的CPU时间的时间限制(以微秒为单位),而不会阻塞系统调用。

可用性:Linux 2.6.25或更高版本。

版本3.4中的新功能。

resource.RLIMIT_SIGPENDING

进程可能排队的信号数。

可用性:Linux 2.6.8或更高版本。

版本3.4中的新功能。

resource.RLIMIT_SBSIZE

此用户的套接字缓冲区使用的最大大小(以字节为单位)。这限制了此用户可以随时保存的网络内存量,因此限制mbuf的数量。

可用性:FreeBSD 9或更高版本。

版本3.4中的新功能。

resource.RLIMIT_SWAP

可由此用户ID的所有进程保留或使用的交换空间的最大大小(以字节为单位)。仅当设置了vm.overcommit sysctl的位1时,才会强制执行此限制。有关此sysctl的完整说明,请参阅tuning(7)

可用性:FreeBSD 9或更高版本。

版本3.4中的新功能。

resource.RLIMIT_NPTS

此用户ID创建的伪终端的最大数量。

可用性:FreeBSD 9或更高版本。

版本3.4中的新功能。

35.11.2. Resource Usage

这些函数用于检索资源使用信息:

resource.getrusage(who)

此函数返回描述由当前进程或其子进程消耗的资源的对象,由who参数指定。应使用下面描述的RUSAGE_*常量之一指定who参数。

返回值的字段各自描述特定系统资源如何被使用,例如,花费的运行时间是用户模式或进程被交换出主存储器的次数。一些值取决于内部的时钟节拍,例如。进程正在使用的内存量。

为了向后兼容,返回值也可以作为16个元素的元组访问。

返回值的字段ru_utimeru_stime分别是表示在用户模式下执行的时间量和在系统模式下执行所花费的时间量的浮点值。其余值为整数。有关这些值的详细信息,请参阅getrusage(2)手册页。简要摘要如下:

指数领域资源
0ru_utime用户模式下的时间(float)
1ru_stime系统模式下的时间(浮点)
2ru_maxrss最大驻留集大小
3ru_ixrss共享内存大小
4ru_idrss非共享内存大小
5ru_isrss非共享堆栈大小
6ru_minflt页面故障不需要I / O
7ru_majflt页面故障需要I / O
8ru_nswap换出数量
9ru_inblock块输入操作
10ru_oublock块输出操作
11ru_msgsnd消息发送
12ru_msgrcv消息接收
13ru_nsignals信号接收
14ru_nvcsw自愿上下文切换
15ru_nivcsw非随意上下文切换

如果指定了无效的who参数,此函数将引发ValueError它也可能在异常情况下引发error异常。

resource.getpagesize()

返回系统页面中的字节数。(这不需要与硬件页面大小相同。)

以下RUSAGE_*符号被传递到getrusage()函数,以指定应提供哪些进程信息。

resource.RUSAGE_SELF

传递到getrusage()以请求调用进程消耗的资源,这是进程中的所有线程使用的资源的总和。

resource.RUSAGE_CHILDREN

传递到getrusage()以请求已终止并等待的调用进程的子进程消耗的资源。

resource.RUSAGE_BOTH

Pass to getrusage() to request resources consumed by both the current process and child processes. 可能不适用于所有系统。

resource.RUSAGE_THREAD

传递到getrusage()以请求当前线程使用的资源。可能不适用于所有系统。

版本3.2中的新功能。