使用Python的资源使用信息
要衡量UNIX资源的使用情况,我们需要在程序中使用资源模块。该模块还可以控制资源利用率。
要使用此模块,我们应该使用-导入它
import resource
资源限制
在此模块中,我们可以使用setrlimit()
来限制资源利用率。有两个参数可以限制资源。这些参数是软限制和硬限制。软极限基本上是当前极限,可以在过程中进行更改,但不能超过硬极限。硬限制可以减小到软限制之上的任何值,但不能增加。
有一些与资源限制有关的方法和常量。这些是。
方法resource.getrlimit(resource)
此方法用于将软限制和硬限制作为元组返回。如果指定的资源无效,它将引发ValueError。
方法resource.setrlimit(资源,限制)
此方法用于设置资源限制。可以将限制指定为软限制和硬限制的元组。我们还可以使用RLIM_INFINITY来制作无限资源。
方法resource.prlimit(pid,resource[,限制])
此方法是setrlimit()
和getrlimit()
方法的组合。它可以为任意进程同时获取和设置资源限制。当pid为0时,它将在当前进程上工作。
一些与资源限制有关的常量-
RLIM_INFINITY
无限资源的限制
RLIMIT_CORE
当前进程创建的核心文件的最大大小。
RLIMIT_CPU
处理器的最大处理器时间。当超过限制时,SIGXCCPU信号将发送到该进程。
RLIMIT_DATA
处理器堆的最大大小
RLIMIT_STACK
调用堆栈的最大大小。它使用主线程的堆栈进行多线程处理。
RLIMIT_NOFILE
当前进程的最大打开文件描述符数。
RLIMIT_MEMLOCK
锁定内存的最大地址空间
RLIMIT_NICE
流程的最佳级别的上限
RLIMIT_SWAP
交换空间的最大大小
RLIMIT_NTPS
系统中的最大伪终端数
资源使用
存在与资源使用相关的方法和常量。
方法resource.getrusage(谁)
此方法用于返回当前进程或其子级使用的对象。它返回不同的字段。从返回值的字段中,我们可以获取有关如何使用资源的信息。
方法resource.getpagesize()
此方法用于返回系统页面中的字节数。它可能与物理页面大小不同。
一些与资源使用有关的常数。
RUSAGE_SELF
它有助于请求调用过程消耗的资源。它是不同线程的所有资源的总和。
RUSAGE_CHILDREN
它有助于请求子进程消耗的资源。
RUSAGE_BOTH
它有助于请求调用进程以及子进程消耗的资源。并非适用于所有系统
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)