使用Python的资源使用信息

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

要使用此模块,我们应该使用-导入它

import resource

资源限制

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

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

方法resource.getrlimit(resource)

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

方法resource.setrlimit(资源,限制)

此方法用于设置资源限制。可以将限制指定为软限制和硬限制的元组。我们还可以使用RLIM_INFINITY来制作无限资源。

方法resource.prlimit(pid,resource [,限制])

此方法是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

流程的最佳级别的上限

9

RLIMIT_SWAP

交换空间的最大大小

10

RLIMIT_NTPS

系统中的最大伪终端数

资源使用

存在与资源使用相关的方法和常量。

方法resource.getrusage(谁)

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

方法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)