resource --- 資源使用信息?
該模塊提供了測量和控制程序所利用的系統資源的基本機制。
符號常量被用來指定特定的系統資源,并要求獲得關于當前進程或其子進程的使用信息。
當系統調用失敗時,會觸發一個 OSError 。
資源限制?
資源的使用可以通過下面描述的 setrlimit() 函數來限制。每個資源都被一對限制所控制:一個軟限制和一個硬限制。軟限制是當前的限制,并且可以由一個進程隨著時間的推移而降低或提高。軟限制永遠不能超過硬限制。硬限制可以降低到大于軟限制的任何數值,但不能提高。(只有擁有超級用戶有效UID的進程才能提高硬限制。)
可以被限制的具體資源取決于系統。它們在 man getrlimit(2) 中描述。 下面列出的資源在底層操作系統支持的情況下被支持;那些不能被操作系統檢查或控制的資源在本模塊中沒有為這些平臺定義。
-
resource.RLIM_INFINITY? 用來表示無限資源的極限的常數。
-
resource.getrlimit(resource)? 返回一個包含 resource 當前軟限制和硬限制的元組。如果指定了一個無效的資源,則觸發
ValueError,如果底層系統調用意外失敗,則引發error。
-
resource.setrlimit(resource, limits)? 設置 resource 的新的消耗極限。參數 limits 必須是一個由兩個整數組成的元組
(soft, hard),描述了新的限制。RLIM_INFINITY的值可以用來請求一個無限的限制。如果指定了一個無效的資源,如果新的軟限制超過了硬限制,或者如果一個進程試圖提高它的硬限制,將觸發
ValueError。當資源的硬限制或系統限制不是無限時,指定一個RLIM_INFINITY的限制將導致ValueError。 一個有效 UID 為超級用戶的進程可以請求任何有效的限制值,包括無限,但如果請求的限制超過了系統規定的限制,則仍然會產生ValueError。如果底層系統調用失敗,
setrlimit也可能觸發error。
-
resource.prlimit(pid, resource[, limits])? 將
setrlimit()和getrlimit()合并為一個函數,支持獲取和設置任意進程的資源限制。如果 pid 為0,那么該調用適用于當前進程。 resource 和 limits 的含義與setrlimit()相同,只是 limits 是可選的。當 limits 沒有給出時,該函數返回進程 pid 的 resource 限制。當 limits 被給定時,進程的 resource 限制被設置,并返回以前的資源限制。
當 pid 找不到時,觸發
ProcessLookupError;當用戶沒有進程的權限時,觸發PermissionError。Availability: Linux 2.6.36 或更新版本帶有 glibc 2.13 或更新版本
3.4 新版功能.
這些符號定義了資源的消耗可以通過下面描述的 setrlimit() 和 getrlimit() 函數來控制。這些符號的值正是 C 程序所使用的常數。
Unix man 頁面 getrlimit(2) 列出了可用的資源。注意,并非所有系統都使用相同的符號或相同的值來表示相同的資源。本模塊并不試圖掩蓋平臺的差異——沒有為某一平臺定義的符號在該平臺上將無法從本模塊中獲得。
-
resource.RLIMIT_CORE? 當前進程可以創建的核心文件的最大大小(以字節為單位)。如果需要更大的核心文件來包含整個進程的鏡像,這可能會導致創建一個部分核心文件。
-
resource.RLIMIT_CPU? 一個進程可以使用的最大處理器時間(以秒為單位)。如果超過了這個限制,一個
SIGXCPU信號將被發送給進程。()參見signal模塊文檔,了解如何捕捉這個信號并做一些有用的事情,例如,將打開的文件刷新到磁盤上)。
-
resource.RLIMIT_FSIZE? 進程可能創建的文件的最大大小。
-
resource.RLIMIT_DATA? 進程的堆的最大大小(以字節為單位)。
-
resource.RLIMIT_STACK? 當前進程的調用堆棧的最大大小(字節)。 這只影響到多線程進程中主線程的堆棧。
-
resource.RLIMIT_RSS? 應該提供給進程的最大常駐內存大小。
-
resource.RLIMIT_NPROC? 當前進程可能創建的最大進程數。
-
resource.RLIMIT_NOFILE? 當前進程打開的文件描述符的最大數量。
-
resource.RLIMIT_OFILE? BSD 對
RLIMIT_NOFILE的命名。
-
resource.RLIMIT_MEMLOCK? 可能被鎖定在內存中的最大地址空間。
-
resource.RLIMIT_VMEM? 進程可能占用的最大映射內存區域。
-
resource.RLIMIT_AS? 進程可能占用的地址空間的最大區域(以字節為單位)。
-
resource.RLIMIT_MSGQUEUE? 可分配給 POSIX 消息隊列的字節數。
Availability: Linux 2.6.8 或更新版本。
3.4 新版功能.
-
resource.RLIMIT_NICE? 進程的 Nice 級別的上限(計算為 20 - rlim_cur )。
Availability: Linux 2.6.12 或更新版本
3.4 新版功能.
-
resource.RLIMIT_RTPRIO? 實時優先級的上限。
Availability: Linux 2.6.12 或更新版本
3.4 新版功能.
-
resource.RLIMIT_RTTIME? 在實時調度下,一個進程在不進行阻塞性系統調用的情況下,可以花費的 CPU 時間限制(以微秒計)。
Availability: Linux 2.6.25 或更新版本
3.4 新版功能.
-
resource.RLIMIT_SIGPENDING? 進程可能排隊的信號數量。
Availability: Linux 2.6.8 或更新版本。
3.4 新版功能.
-
resource.RLIMIT_SBSIZE? 這個用戶使用的套接字緩沖區的最大大小(字節數)。這限制了這個用戶在任何時候都可以持有的網絡內存數量,因此也限制了 mbufs 的數量。
Availability: FreeBSD 9 或更新版本
3.4 新版功能.
-
resource.RLIMIT_SWAP? The maximum size (in bytes) of the swap space that may be reserved or used by all of this user id's processes. This limit is enforced only if bit 1 of the vm.overcommit sysctl is set. Please see tuning(7) for a complete description of this sysctl.
Availability: FreeBSD 9 或更新版本
3.4 新版功能.
-
resource.RLIMIT_NPTS? 該用戶 ID 創建的偽終端的最大數量。
Availability: FreeBSD 9 或更新版本
3.4 新版功能.
資源用量?
這些函數被用來檢索資源使用信息。
-
resource.getrusage(who)? 這個函數返回一個對象,描述當前進程或其子進程所消耗的資源,由 who 參數指定。 who 參數應該使用下面描述的
RUSAGE_*常數之一來指定。返回值的字段分別描述了某一特定系統資源的使用情況,例如,在用戶模式下運行的時間或進程從主內存中換出的次數。有些值取決于內部的時鐘周期,例如進程使用的內存量。
為了向后兼容,返回值也可以作為一個 16 個元素的元組來訪問。
返回值中的
ru_utime和ru_stime字段是浮點值,分別代表在用戶模式下執行的時間和在系統模式下執行的時間。其余的值是整數。關于這些值的詳細信息,請查閱 getrusage(2) man page 。這里介紹一個簡短的摘要。索引
域
資源
0ru_utimetime in user mode (float)
1ru_stimetime in system mode (float)
2ru_maxrss最大的常駐內存大小
3ru_ixrss共享內存大小
4ru_idrss未共享的內存大小
5ru_isrss未共享的堆棧大小
6ru_minflt不需要 I/O 的頁面故障
7ru_majflt需要 I/O 的頁面故障數
8ru_nswapswap out 的數量
9ru_inblock塊寫入操作數
10ru_oublock塊輸出操作數
11ru_msgsnd發送消息數
12ru_msgrcv收到消息數
13ru_nsignals收到信號數
14ru_nvcsw主動上下文切換
15ru_nivcsw被動上下文切換
如果指定了一個無效的 who 參數,這個函數將觸發一個
ValueError。在特殊情況下,它也可能觸發error異常。
-
resource.getpagesize()? 返回一個系統頁面的字節數。(這不需要和硬件頁的大小相同)。
下面的 RUSAGE_* 符號被傳遞給 getrusage() 函數,以指定應該為哪些進程提供信息。
-
resource.RUSAGE_SELF? 傳遞給
getrusage()以請求調用進程消耗的資源,這是進程中所有線程使用的資源總和。
-
resource.RUSAGE_CHILDREN? 傳遞給
getrusage()以請求被終止和等待的調用進程的子進程所消耗的資源。
-
resource.RUSAGE_BOTH? 傳遞給
getrusage()以請求當前進程和子進程所消耗的資源。并非所有系統都能使用。
-
resource.RUSAGE_THREAD? 傳遞給
getrusage()以請求當前線程所消耗的資源。 并非所有系統都能使用。3.2 新版功能.
