使用 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)
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP