使用 Python 的资源使用信息


要测量 UNIX 资源使用情况,我们需要在程序中使用 resource 模块。此模块还可以控制资源利用率。

要使用此模块,我们应该使用以下方法导入它:

import resource

资源限制

在此模块中,我们可以使用 setrlimit() 来限制资源利用率。有两个参数可以限制资源。这些参数是软限制和硬限制。软限制基本上是当前限制,它可以在进程中更改,但不能超过硬限制。硬限制可以降低到软限制以上任何值,但不能增加。

有一些与资源限制相关的方法和常量。这些是。

方法 resource.getrlimit(resource)

此方法用于将软限制和硬限制作为元组返回。如果指定的资源无效,它将引发 ValueError。

方法 resource.setrlimit(resource, limits)

此方法用于设置资源限制。限制可以分配为软限制和硬限制的元组。我们还可以使用 RLIM_INFINITY 使资源无限。

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

此方法是 setrlimit() 和 getrlimit() 方法的组合。它可以同时获取和设置任意进程的资源限制。当 pid 为 0 时,它将在当前进程上运行。

一些与资源限制相关的常量:

序号 常量和描述
1

RLIM_INFINITY

无限资源的限制

2

RLIMIT_CORE

当前进程创建的核心文件的最大大小。

3

RLIMIT_CPU

处理器的最大处理器时间。当限制超出时,会向进程发送 SIGXCCPU 信号。

4

RLIMIT_DATA

处理器堆的最大大小

5

RLIMIT_STACK

调用堆栈的最大大小。它使用多线程进程的主线程的堆栈。

6

RLIMIT_NOFILE

当前进程打开的文件描述符的最大数量。

7

RLIMIT_MEMLOCK

锁定内存的最大地址空间

8

RLIMIT_NICE

进程的 nice 级别上限

9

RLIMIT_SWAP

交换空间的最大大小

10

RLIMIT_NTPS

系统中伪终端的最大数量

资源使用情况

有一些与资源使用相关的方

方法 resource.getrusage(who)

此方法用于返回当前进程或其子进程使用的对象。它返回不同的字段。从返回值的字段中,我们可以获取有关如何使用资源的信息。

方法 resource.getpagesize()

此方法用于返回系统页面中的字节数。它可能与物理页面大小不同。

一些与资源使用相关的常量。

序号 常量和描述
1

RUSAGE_SELF

它有助于请求调用进程消耗的资源。它是不同线程的所有资源的总和。

2

RUSAGE_CHILDREN

它有助于请求子进程消耗的资源。

3

RUSAGE_BOTH

它有助于请求调用进程以及子进程消耗的资源。它并非所有系统都可用

4

RUSAGE_THREAD

当前线程的资源使用情况。它并非所有系统都可用

示例代码

import resource
res_limits = resource.getrusage(resource.RUSAGE_SELF)
print(res_limits)
print('Page Size: ' + str(resource.getpagesize()))
resource.setrlimit(resource.RLIMIT_CPU, (1, 2))
print('Resouce Limits: ' + str(resource.getrlimit(resource.RLIMIT_CPU)))
for a in range(1000):
   for b in range(1000):
      for c in range(1000):
         pass

输出

$ python3 example.py
resource.struct_rusage(ru_utime=0.035801, ru_stime=0.01074, ru_maxrss=9356, ru_ixrss=0, ru_idrss=0, 
ru_isrss=0, ru_minflt=1147, ru_majflt=0, ru_nswap=0, ru_inblock=0, ru_oublock=0, 
ru_msgsnd=0, ru_msgrcv=0, ru_nsignals=0, ru_nvcsw=0, ru_nivcsw=17)
Page Size: 4096
Resouce Limits: (1, 2)
CPU time limit exceeded (core dumped)

更新于: 2019-07-30

764 次浏览

开启您的 职业生涯

通过完成课程获得认证

开始
广告
© . All rights reserved.