On this page
资源-资源使用信息
该模块提供了用于测量和控制程序使用的系统资源的基本机制。
符号常量用于指定特定的系统资源,并请求有关当前进程或其子进程的使用信息。
系统调用失败时引发OSError。
- exception
resource.
error
- OSError的别名已弃用。
在版本 3.3 中进行了更改:在 PEP 3151之后,该类被命名为OSError。
Resource Limits
可以使用下面介绍的setrlimit()函数来限制资源使用。每个资源由Pair限制控制:一个软限制和一个硬限制。软极限是当前极限,并且可以随着时间的流逝而降低或升高。软限制永远不能超过硬限制。硬限制可以降低到大于软限制的任何值,但不能提高。 (只有具有超级用户有效 UID 的进程才能提出硬限制.)
可以限制的特定资源取决于系统。它们在* getrlimit(2) *手册页中进行了描述。当底层 os 支持它们时,将支持下面列出的资源;那些平台无法在该模块中定义 os 无法检查或控制的资源。
resource.
RLIM_INFINITY
- 用于表示无限资源限制的常量。
resource.
getrlimit
(资源)- 返回一个 Tuples
(soft, hard)
,其当前的软限制和硬限制为* resource *。如果指定了无效的资源,则引发ValueError;如果基础系统调用意外失败,则引发error。
- 返回一个 Tuples
resource.
setrlimit
(资源,限制)- 设置* resource *的新消耗限制。 * limits *参数必须是描述新限制的两个整数的 Tuples
(soft, hard)
。值RLIM_INFINITY可用于请求无限制的限制。
- 设置* resource *的新消耗限制。 * limits *参数必须是描述新限制的两个整数的 Tuples
如果指定了无效的资源,新的软限制超出了硬限制或过程try提高其硬限制,则引发ValueError。如果该资源的硬限制或系统限制不是无限的,则将限制指定为RLIM_INFINITY,将导致ValueError。具有超级用户有效 UID 的进程可以请求任何有效的限制值,包括无限制,但是如果请求的限制超出系统施加的限制,则ValueError仍将被引发。
如果基础系统调用失败,setrlimit
也可能引发error。
VxWorks 仅支持设置RLIMIT_NOFILE。
用参数resource
,limits
引发auditing event resource.setrlimit
。
resource.
prlimit
(* pid , resource * [,* limits *])- 将setrlimit()和getrlimit()合并到一个函数中,并支持获取和设置任意进程的资源限制。如果* pid *为 0,则该调用将应用于当前进程。 * resource 和 limits 与setrlimit()的含义相同,除了 limits *是可选的。
如果未指定* limits ,该函数将返回进程 pid 的 resource 限制。给定 limits 后,将设置进程的 resource *限制,并返回以前的资源限制。
当找不到* pid *时,引发ProcessLookupError;当用户没有CAP_SYS_RESOURCE
时,引发PermissionError。
用参数pid
,resource
,limits
引发auditing event resource.prlimit
。
Availability:Linux 2.6.36 或更高版本以及 glibc 2.13 或更高版本。
3.4 版的新Function。
这些符号定义了可以使用下面介绍的setrlimit()和getrlimit()Function控制其消耗的资源。这些符号的值恰好是 C 程序使用的常数。
- getrlimit(2) *的 Unix 手册页列出了可用资源。请注意,并非所有系统都使用相同的符号或相同的值来表示相同的资源。该模块不会try掩盖平台差异-未为平台定义的符号将无法从该平台上的该模块中获得。
resource.
RLIMIT_CORE
- 当前进程可以创建的核心文件的最大大小(以字节为单位)。如果需要更大的内核来包含整个过程映像,则可能会导致创建部分内核文件。
resource.
RLIMIT_CPU
- 一个进程可以使用的最大处理器时间(以秒为单位)。如果超出此限制,则将
SIGXCPU
signal 发送到该过程。 (有关如何捕获此 signal 并执行一些有用的操作(例如,将打开的文件刷新到磁盘)的信息,请参见signal模块文档。)
- 一个进程可以使用的最大处理器时间(以秒为单位)。如果超出此限制,则将
resource.
RLIMIT_FSIZE
- 进程可以创建的文件的最大大小。
resource.
RLIMIT_DATA
- 进程堆的最大大小(以字节为单位)。
resource.
RLIMIT_STACK
- 当前进程的调用堆栈的最大大小(以字节为单位)。这仅影响多线程进程中主线程的堆栈。
resource.
RLIMIT_RSS
- 该过程应使用的最大常驻集大小。
resource.
RLIMIT_NPROC
- 当前进程可以创建的最大进程数。
resource.
RLIMIT_NOFILE
- 当前进程的最大打开文件 Descriptors 数。
resource.
RLIMIT_OFILE
- RLIMIT_NOFILE的 BSD 名称。
resource.
RLIMIT_MEMLOCK
- 可以锁定在内存中的最大地址空间。
resource.
RLIMIT_VMEM
- 进程可能占用的最大 Map 内存区域。
resource.
RLIMIT_AS
- 进程可能占用的地址空间的最大区域(以字节为单位)。
resource.
RLIMIT_MSGQUEUE
- 可以为 POSIX 消息队列分配的字节数。
Availability:Linux 2.6.8 或更高版本。
3.4 版的新Function。
resource.
RLIMIT_NICE
- 进程的良好级别的上限(计算为 20-rlim_cur)。
Availability:Linux 2.6.12 或更高版本。
3.4 版的新Function。
resource.
RLIMIT_RTPRIO
- 实时优先级的上限。
Availability:Linux 2.6.12 或更高版本。
3.4 版的新Function。
resource.
RLIMIT_RTTIME
- 在不进行阻塞系统调用的情况下,进程可以在实时调度下花费的 CPU 时间的时间限制(以微秒为单位)。
Availability:Linux 2.6.25 或更高版本。
3.4 版的新Function。
resource.
RLIMIT_SIGPENDING
- 进程可能排队的 signal 数。
Availability:Linux 2.6.8 或更高版本。
3.4 版的新Function。
resource.
RLIMIT_SBSIZE
- 此用户的套接字缓冲区使用的最大大小(以字节为单位)。这限制了该用户可以随时保留的网络内存量,从而限制了 mbufs 量。
Availability:FreeBSD 9 或更高版本。
3.4 版的新Function。
resource.
RLIMIT_SWAP
- 此用户标识的所有进程可以保留或使用的交换空间的最大大小(以字节为单位)。仅当设置了 vm.overcommit sysctl 的位 1 时,才强制执行此限制。有关此 sysctl 的完整说明,请参阅* tuning(7) *。
Availability:FreeBSD 9 或更高版本。
3.4 版的新Function。
resource.
RLIMIT_NPTS
- 此用户标识创建的最大伪终端数。
Availability:FreeBSD 9 或更高版本。
3.4 版的新Function。
Resource Usage
这些函数用于检索资源使用信息:
resource.
getrusage
(谁)- 该函数返回一个对象,该对象描述由* who *参数指定的当前进程或其子进程消耗的资源。 * who *参数应使用下面描述的
RUSAGE_*
常量之一指定。
- 该函数返回一个对象,该对象描述由* who *参数指定的当前进程或其子进程消耗的资源。 * who *参数应使用下面描述的
一个简单的例子:
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 个元素的 Tuples 进行访问。
返回值的字段ru_utime
和ru_stime
是浮点值,分别表示在用户模式下执行所花费的时间和在系统模式下执行所花费的时间。其余值为整数。请查阅* getrusage(2) *手册页以获取有关这些值的详细信息。这里有一个简短的摘要:
Index | Field | Resource |
---|---|---|
0 |
ru_utime |
用户模式下的时间(Float 秒) |
1 |
ru_stime |
系统模式下的时间(Float 秒) |
2 |
ru_maxrss |
最大居民人数 |
3 |
ru_ixrss |
共享内存大小 |
4 |
ru_idrss |
未共享的内存大小 |
5 |
ru_isrss |
未共享的堆栈大小 |
6 |
ru_minflt |
不需要 I/O 的页面错误 |
7 |
ru_majflt |
需要 I/O 的页面错误 |
8 |
ru_nswap |
换出次数 |
9 |
ru_inblock |
块 Importing 操作 |
10 |
ru_oublock |
块输出操作 |
11 |
ru_msgsnd |
messages sent |
12 |
ru_msgrcv |
messages received |
13 |
ru_nsignals |
signals received |
14 |
ru_nvcsw |
自愿上下文切换 |
15 |
ru_nivcsw |
非自愿上下文切换 |
如果指定了无效的* who *参数,此函数将引发ValueError。在异常情况下,它也可能引发error异常。
resource.
getpagesize
( )- 返回系统页面中的字节数。 (这不必与硬件页面大小相同.)
以下RUSAGE_*
符号传递给getrusage()函数,以指定应为哪些进程提供信息。
resource.
RUSAGE_SELF
- 传递给getrusage()以请求调用进程消耗的资源,这是该进程中所有线程使用的资源的总和。
resource.
RUSAGE_CHILDREN
- 传递给getrusage()以请求由调用进程的子进程消耗的资源,这些资源已终止并 await。
resource.
RUSAGE_BOTH
- 传递给getrusage()以请求当前进程和子进程消耗的资源。可能并非在所有系统上都可用。
resource.
RUSAGE_THREAD
- 传递给getrusage()以请求当前线程消耗的资源。可能并非在所有系统上都可用。
3.2 版中的新Function。