使用 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