resource ——资源使用情况


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

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

OSError 在SysCall失败时引发。

exception resource.error

的别名已弃用 OSError .

在 3.3 版更改: 跟随 PEP 3151 ,该类是的别名 OSError .

资源限制

可以使用 setrlimit() 功能描述如下。每个资源由一对限制控制:软限制和硬限制。软限制是电流限制,可以通过一个过程随着时间的推移而降低或提高。软极限不能超过硬极限。硬极限可以降低到任何大于软极限的值,但不能升高。(只有具有超级用户有效uid的进程才能提高硬限制。)

可以限制的特定资源取决于系统。它们在 getrlimit(2) 人页。当基础操作系统支持下列资源时,将支持这些资源;此模块中没有为这些平台定义无法由操作系统检查或控制的资源。

resource.RLIM_INFINITY

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

resource.getrlimit(resource)

返回元组 (soft, hard) 目前软硬极限 资源 . 引发 ValueError 如果指定的资源无效,或 error 如果基础系统调用意外失败。

resource.setrlimit(resource, limits)

设置新的消耗限制 资源 . 这个 limit 参数必须是元组 (soft, hard) 描述新极限的两个整数。一个值 RLIM_INFINITY 可用于请求不受限制的限制。

引发 ValueError 如果指定的资源无效,如果新的软限制超过硬限制,或者进程试图提高其硬限制。指定限制 RLIM_INFINITY 当该资源的硬限制或系统限制不是无限时,将导致 ValueError . 具有超级用户有效uid的进程可以请求任何有效的限制值,包括unlimited,但是 ValueError 如果请求的限制超过系统强制的限制,仍将提高。

setrlimit 也可以提高 error 如果基础系统调用失败。

VXWorks仅支持设置 RLIMIT_NOFILE .

提出一个 auditing event resource.setrlimit 带着论据 resourcelimits .

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

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

什么时候? limit 未给定函数返回 资源 过程的限制 pid . 什么时候? limit 给出了 资源 设置了进程的限制,并返回以前的资源限制。

引发 ProcessLookupError 什么时候? pid 找不到并且 PermissionError 当用户没有 CAP_SYS_RESOURCE 为了这个过程。

提出一个 auditing event resource.prlimit 带着论据 pidresourcelimits .

Availability :使用glibc 2.13或更高版本的Linux 2.6.36或更高版本。

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消息队列分配的字节数。

Availability :Linux 2.6.8或更高版本。

3.4 新版功能.

resource.RLIMIT_NICE

这个过程的最高水平(计算为20-rlim-cur)。

Availability :Linux 2.6.12或更高版本。

3.4 新版功能.

resource.RLIMIT_RTPRIO

实时优先级的上限。

Availability :Linux 2.6.12或更高版本。

3.4 新版功能.

resource.RLIMIT_RTTIME

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

Availability :Linux 2.6.25或更高版本。

3.4 新版功能.

resource.RLIMIT_SIGPENDING

进程可能排队的信号数。

Availability :Linux 2.6.8或更高版本。

3.4 新版功能.

resource.RLIMIT_SBSIZE

此用户使用的套接字缓冲区的最大大小(字节)。这限制了网络内存的数量,因此也限制了该用户在任何时候可以持有的mbuf的数量。

Availability :freebsd 9或更高版本。

3.4 新版功能.

resource.RLIMIT_SWAP

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

Availability :freebsd 9或更高版本。

3.4 新版功能.

resource.RLIMIT_NPTS

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

Availability :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_utimeru_stime 返回值中的浮点值分别表示在用户模式下执行所花费的时间和在系统模式下执行所花费的时间。其余值为整数。咨询 getrusage(2) 有关这些值的详细信息,请参见手册页。这里简要总结如下:

索引

资源

0

ru_utime

用户模式下的时间(浮点秒)

1

ru_stime

系统模式下的时间(浮点秒)

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

块输入操作

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 新版功能.