resource
resource - 资源使用信息
该模块提供了测量和控制程序使用的系统资源的基本机制。
符号常量用于指定特定系统资源并请求有关当前进程或其子进程的使用信息。
针对错误定义了一个例外:
exception resource.error
如果底层系统调用失败意外,下面描述的函数可能会引发此错误。
1.资源限制
资源使用可以使用下面描述的setrlimit()函数进行限制。 每个资源都由一对限制控制:软限制和硬限制。 软限制是电流限制,可能会随着时间的推移而降低或提高。 软限制永远不会超过硬限制。 硬限制可以降低到大于软限制的任何值,但不会升高。 (只有拥有超级用户的有效UID的进程才能提高硬性限制。)
可以限制的具体资源依赖于系统。它们在getrlimit(2)
手册页中进行了描述。下面列出的资源在底层操作系统支持时支持; 对于那些平台,在这个模块中没有定义操作系统无法检查或控制的资源。
resource.RLIM_INFINITY
常量用于表示无限资源的限制。
resource.getrlimit(resource)
使用当前资源的软限制和硬限制返回一个元组(软,硬)。 如果指定了无效资源,则引发ValueError;如果底层系统调用意外失败,则引发错误。
resource.setrlimit(resource, limits)
设定资源
消耗的新限制。该限制
参数必须是一个元组(soft, hard)
两个整数描述的新限制的。值RLIM_INFINITY
可以用来请求无限制的限制。
如果指定了无效的资源,如果新的软限制超过硬限制,或者某个进程试图提高硬限制,则会引发ValueError。 如果该资源的硬限制或系统限制不是无限的,则指定RLIM_INFINITY的限制将导致ValueError。 具有超级用户的有效UID的进程可以请求任何有效的限制值,包括无限制,但是如果请求的限制超过系统限制,则仍会引发ValueError。
如果底层系统调用失败,setrlimit也可能引发错误。
这些符号定义了可以使用下面描述的setrlimit()和getrlimit()函数来控制其消耗的资源。 这些符号的值恰好是C程序使用的常量。
getrlimit(2)
的Unix手册页列出了可用资源。请注意,并非所有系统都使用相同的符号或相同的值来表示相同的资源。该模块不会尝试屏蔽平台差异 - 在该平台上,该模块将无法使用未为平台定义的符号。
resource.RLIMIT_CORE
当前进程可以创建的核心文件的最大大小(以字节为单位)。如果需要更大的内核来包含整个过程映像,则可能会导致创建部分内核文件。
resource.RLIMIT_CPU
处理器可以使用的最大处理器时间量(以秒为单位)。 如果超出此限制,则会向进程发送SIGXCPU信号。 (有关如何捕获此信号并执行一些有用的操作的信息,请参阅信号模块文档,例如将打开的文件刷新到磁盘。)
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
进程可能占用的地址空间的最大区域(以字节为单位)。
2.资源使用
这些函数用于检索资源使用信息:
resource.getrusage(who)
此函数返回一个对象,该对象描述由who参数指定的当前进程或其子进程使用的资源。 who参数应该使用下面描述的RUSAGE_ *常量之一来指定。
每个返回值的字段都描述了特定系统资源的使用方式,例如,运行时间是用户模式或进程从主内存换出的次数。某些值取决于内部时钟节拍,例如过程正在使用的内存量。
为了向后兼容,返回值也可以作为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 | 非自愿的上下文切换 |
如果指定了无效who参数,此函数将引发ValueError。 在特殊情况下它可能会引发错误异常。
在版本2.3中进行了更改:增加了对值的访问,作为返回对象的属性。
resource.getpagesize()
返回系统页面中的字节数。(这不必与硬件页面大小相同。)
以下RUSAGE_*
符号被传递给该getrusage()
函数以指定应提供哪些处理信息。
resource.RUSAGE_SELF
RUSAGE_SELF
应该用于请求仅与流程本身有关的信息。
resource.RUSAGE_CHILDREN
传递给getrusage()来请求调用进程的子进程的资源信息。
resource.RUSAGE_BOTH
传递给getrusage()来请求当前进程和子进程消耗的资源。 可能不适用于所有系统。