resource
——资源使用情况¶
该模块提供了测量和控制程序使用的系统资源的基本机制。
符号常量用于指定特定的系统资源,并请求有关当前进程或其子进程的使用信息。
安 OSError
在SysCall失败时引发。
资源限制¶
可以使用 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
带着论据resource
,limits
.
- 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
带着论据pid
,resource
,limits
.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_utime
和ru_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 新版功能.