要衡量UNIX资源的使用情况,我们需要在程序中使用资源模块。该模块还可以控制资源利用率。
要使用此模块,我们应该使用-导入它
import resource
在此模块中,我们可以使用setrlimit()
来限制资源利用率。有两个参数可以限制资源。这些参数是软限制和硬限制。软极限基本上是当前极限,可以在过程中进行更改,但不能超过硬极限。硬限制可以减小到软限制之上的任何值,但不能增加。
有一些与资源限制有关的方法和常量。这些是。
此方法用于将软限制和硬限制作为元组返回。如果指定的资源无效,它将引发ValueError。
此方法用于设置资源限制。可以将限制指定为软限制和硬限制的元组。我们还可以使用RLIM_INFINITY来制作无限资源。
此方法是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 系统中的最大伪终端数 |
存在与资源使用相关的方法和常量。
此方法用于返回当前进程或其子级使用的对象。它返回不同的字段。从返回值的字段中,我们可以获取有关如何使用资源的信息。
此方法用于返回系统页面中的字节数。它可能与物理页面大小不同。
一些与资源使用有关的常数。
序号 | 常数与说明 |
---|---|
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)