resource --- 資源使用信息?


該模塊提供了測(cè)量和控制程序所利用的系統(tǒng)資源的基本機(jī)制。

符號(hào)常量被用來(lái)指定特定的系統(tǒng)資源,并要求獲得關(guān)于當(dāng)前進(jìn)程或其子進(jìn)程的使用信息。

當(dāng)系統(tǒng)調(diào)用失敗時(shí),會(huì)觸發(fā)一個(gè) OSError 。

exception resource.error?

一個(gè)被棄用的 OSError 的別名。

在 3.3 版更改: 根據(jù) PEP 3151,這個(gè)類是 OSError 的別名。

資源限制?

資源的使用可以通過(guò)下面描述的 setrlimit() 函數(shù)來(lái)限制。每個(gè)資源都被一對(duì)限制所控制:一個(gè)軟限制和一個(gè)硬限制。軟限制是當(dāng)前的限制,并且可以由一個(gè)進(jìn)程隨著時(shí)間的推移而降低或提高。軟限制永遠(yuǎn)不能超過(guò)硬限制。硬限制可以降低到大于軟限制的任何數(shù)值,但不能提高。(只有擁有超級(jí)用戶有效UID的進(jìn)程才能提高硬限制。)

可以被限制的具體資源取決于系統(tǒng)。它們?cè)?man getrlimit(2) 中描述。 下面列出的資源在底層操作系統(tǒng)支持的情況下被支持;那些不能被操作系統(tǒng)檢查或控制的資源在本模塊中沒(méi)有為這些平臺(tái)定義。

resource.RLIM_INFINITY?

用來(lái)表示無(wú)限資源的極限的常數(shù)。

resource.getrlimit(resource)?

返回一個(gè)包含 resource 當(dāng)前軟限制和硬限制的元組。如果指定了一個(gè)無(wú)效的資源,則觸發(fā) ValueError ,如果底層系統(tǒng)調(diào)用意外失敗,則引發(fā) error 。

resource.setrlimit(resource, limits)?

設(shè)置 resource 的新的消耗極限。參數(shù) limits 必須是一個(gè)由兩個(gè)整數(shù)組成的元組 (soft, hard) ,描述了新的限制。 RLIM_INFINITY 的值可以用來(lái)請(qǐng)求一個(gè)無(wú)限的限制。

如果指定了一個(gè)無(wú)效的資源,如果新的軟限制超過(guò)了硬限制,或者如果一個(gè)進(jìn)程試圖提高它的硬限制,將觸發(fā) ValueError 。當(dāng)資源的硬限制或系統(tǒng)限制不是無(wú)限時(shí),指定一個(gè) RLIM_INFINITY 的限制將導(dǎo)致 ValueError 。 一個(gè)有效 UID 為超級(jí)用戶的進(jìn)程可以請(qǐng)求任何有效的限制值,包括無(wú)限,但如果請(qǐng)求的限制超過(guò)了系統(tǒng)規(guī)定的限制,則仍然會(huì)產(chǎn)生 ValueError 。

如果底層系統(tǒng)調(diào)用失敗, setrlimit 也可能觸發(fā) error 。

VxWorks只支持設(shè)置 RLIMIT_NOFILE 。

觸發(fā)一個(gè) auditing event resource.setrlimit``使用參數(shù)  ``resource , limits

resource.prlimit(pid, resource[, limits])?

setrlimit()getrlimit() 合并為一個(gè)函數(shù),支持獲取和設(shè)置任意進(jìn)程的資源限制。如果 pid 為0,那么該調(diào)用適用于當(dāng)前進(jìn)程。 resourcelimits 的含義與 setrlimit() 相同,只是 limits 是可選的。

當(dāng) limits 沒(méi)有給出時(shí),該函數(shù)返回進(jìn)程 pidresource 限制。當(dāng) limits 被給定時(shí),進(jìn)程的 resource 限制被設(shè)置,并返回以前的資源限制。

當(dāng) pid 找不到時(shí),觸發(fā) ProcessLookupError ;當(dāng)用戶沒(méi)有進(jìn)程的 CAP_SYS_RESOURCE 時(shí),觸發(fā) PermissionError

觸發(fā)一個(gè) auditing event resource.prlimit 帶有參數(shù) pid , resource , limits 。

Availability: Linux 2.6.36 或更新版本帶有 glibc 2.13 或更新版本

3.4 新版功能.

這些符號(hào)定義了資源的消耗可以通過(guò)下面描述的 setrlimit()getrlimit() 函數(shù)來(lái)控制。這些符號(hào)的值正是 C 程序所使用的常數(shù)。

Unix man 頁(yè)面 getrlimit(2) 列出了可用的資源。注意,并非所有系統(tǒng)都使用相同的符號(hào)或相同的值來(lái)表示相同的資源。本模塊并不試圖掩蓋平臺(tái)的差異——沒(méi)有為某一平臺(tái)定義的符號(hào)在該平臺(tái)上將無(wú)法從本模塊中獲得。

resource.RLIMIT_CORE?

當(dāng)前進(jìn)程可以創(chuàng)建的核心文件的最大大小(以字節(jié)為單位)。如果需要更大的核心文件來(lái)包含整個(gè)進(jìn)程的鏡像,這可能會(huì)導(dǎo)致創(chuàng)建一個(gè)部分核心文件。

resource.RLIMIT_CPU?

一個(gè)進(jìn)程可以使用的最大處理器時(shí)間(以秒為單位)。如果超過(guò)了這個(gè)限制,一個(gè) SIGXCPU 信號(hào)將被發(fā)送給進(jìn)程。(參見(jiàn) signal 模塊文檔,了解如何捕捉這個(gè)信號(hào)并做一些有用的事情,例如,將打開(kāi)的文件刷新到磁盤(pán)上)。

resource.RLIMIT_FSIZE?

進(jìn)程可能創(chuàng)建的文件的最大大小。

resource.RLIMIT_DATA?

進(jìn)程的堆的最大大?。ㄒ宰止?jié)為單位)。

resource.RLIMIT_STACK?

當(dāng)前進(jìn)程的調(diào)用堆棧的最大大?。ㄗ止?jié))。 這只影響到多線程進(jìn)程中主線程的堆棧。

resource.RLIMIT_RSS?

應(yīng)該提供給進(jìn)程的最大常駐內(nèi)存大小。

resource.RLIMIT_NPROC?

當(dāng)前進(jìn)程可能創(chuàng)建的最大進(jìn)程數(shù)。

resource.RLIMIT_NOFILE?

當(dāng)前進(jìn)程打開(kāi)的文件描述符的最大數(shù)量。

resource.RLIMIT_OFILE?

BSD 對(duì) RLIMIT_NOFILE 的命名。

resource.RLIMIT_MEMLOCK?

可能被鎖定在內(nèi)存中的最大地址空間。

resource.RLIMIT_VMEM?

進(jìn)程可能占用的最大映射內(nèi)存區(qū)域。

resource.RLIMIT_AS?

進(jìn)程可能占用的地址空間的最大區(qū)域(以字節(jié)為單位)。

resource.RLIMIT_MSGQUEUE?

可分配給 POSIX 消息隊(duì)列的字節(jié)數(shù)。

Availability: Linux 2.6.8 或更新版本。

3.4 新版功能.

resource.RLIMIT_NICE?

進(jìn)程的 Nice 級(jí)別的上限(計(jì)算為 20 - rlim_cur )。

Availability: Linux 2.6.12 或更新版本

3.4 新版功能.

resource.RLIMIT_RTPRIO?

實(shí)時(shí)優(yōu)先級(jí)的上限。

Availability: Linux 2.6.12 或更新版本

3.4 新版功能.

resource.RLIMIT_RTTIME?

在實(shí)時(shí)調(diào)度下,一個(gè)進(jìn)程在不進(jìn)行阻塞性系統(tǒng)調(diào)用的情況下,可以花費(fèi)的 CPU 時(shí)間限制(以微秒計(jì))。

Availability: Linux 2.6.25 或更新版本

3.4 新版功能.

resource.RLIMIT_SIGPENDING?

進(jìn)程可能排隊(duì)的信號(hào)數(shù)量。

Availability: Linux 2.6.8 或更新版本。

3.4 新版功能.

resource.RLIMIT_SBSIZE?

這個(gè)用戶使用的套接字緩沖區(qū)的最大大?。ㄗ止?jié)數(shù))。這限制了這個(gè)用戶在任何時(shí)候都可以持有的網(wǎng)絡(luò)內(nèi)存數(shù)量,因此也限制了 mbufs 的數(shù)量。

Availability: FreeBSD 9 或更新版本

3.4 新版功能.

resource.RLIMIT_SWAP?

這個(gè)用戶 ID 的所有進(jìn)程可能保留或使用的交換空間的最大大小(字節(jié)數(shù))。這個(gè)限制只有在 vm.overcommit sysctl的第 1 位被置 1 時(shí)才會(huì)被強(qiáng)制執(zhí)行。請(qǐng)參閱 tuning(7) 以獲得關(guān)于這個(gè)系統(tǒng)檢測(cè)器的完整介紹。

Availability: FreeBSD 9 或更新版本

3.4 新版功能.

resource.RLIMIT_NPTS?

該用戶 ID 創(chuàng)建的偽終端的最大數(shù)量。

Availability: FreeBSD 9 或更新版本

3.4 新版功能.

resource.RLIMIT_KQUEUES?

這個(gè)用戶 ID 被允許創(chuàng)建的最大 kqueue 數(shù)量。

Availability: FreeBSD 11 或更新版本。

3.10 新版功能.

資源用量?

這些函數(shù)被用來(lái)檢索資源使用信息。

resource.getrusage(who)?

這個(gè)函數(shù)返回一個(gè)對(duì)象,描述當(dāng)前進(jìn)程或其子進(jìn)程所消耗的資源,由 who 參數(shù)指定。 who 參數(shù)應(yīng)該使用下面描述的 RUSAGE_* 常數(shù)之一來(lái)指定。

一個(gè)簡(jiǎn)單的示例:

from resource import *
import time

# a non CPU-bound task
time.sleep(3)
print(getrusage(RUSAGE_SELF))

# a CPU-bound task
for i in range(10 ** 8):
   _ = 1 + 1
print(getrusage(RUSAGE_SELF))

返回值的字段分別描述了某一特定系統(tǒng)資源的使用情況,例如,在用戶模式下運(yùn)行的時(shí)間或進(jìn)程從主內(nèi)存中換出的次數(shù)。有些值取決于內(nèi)部的時(shí)鐘周期,例如進(jìn)程使用的內(nèi)存量。

為了向后兼容,返回值也可以作為一個(gè) 16 個(gè)元素的元組來(lái)訪問(wèn)。

返回值中的 ru_utimeru_stime 字段是浮點(diǎn)值,分別代表在用戶模式下執(zhí)行的時(shí)間和在系統(tǒng)模式下執(zhí)行的時(shí)間。其余的值是整數(shù)。關(guān)于這些值的詳細(xì)信息,請(qǐng)查閱 getrusage(2) man page 。這里介紹一個(gè)簡(jiǎn)短的摘要。

索引

字段

資源

0

ru_utime

用戶模式下的時(shí)間(浮點(diǎn)數(shù)秒)

1

ru_stime

系統(tǒng)模式下的時(shí)間(浮點(diǎn)數(shù)秒)

2

ru_maxrss

最大的常駐內(nèi)存大小

3

ru_ixrss

共享內(nèi)存大小

4

ru_idrss

未共享的內(nèi)存大小

5

ru_isrss

未共享的堆棧大小

6

ru_minflt

不需要 I/O 的頁(yè)面故障數(shù)

7

ru_majflt

需要 I/O 的頁(yè)面故障數(shù)

8

ru_nswap

swap out 的數(shù)量

9

ru_inblock

塊輸入操作數(shù)

10

ru_oublock

塊輸出操作數(shù)

11

ru_msgsnd

發(fā)送消息數(shù)

12

ru_msgrcv

收到消息數(shù)

13

ru_nsignals

收到信號(hào)數(shù)

14

ru_nvcsw

主動(dòng)上下文切換

15

ru_nivcsw

被動(dòng)上下文切換

如果指定了一個(gè)無(wú)效的 who 參數(shù),這個(gè)函數(shù)將觸發(fā)一個(gè) ValueError 。在特殊情況下,它也可能觸發(fā) error 異常。

resource.getpagesize()?

返回一個(gè)系統(tǒng)頁(yè)面的字節(jié)數(shù)。(這不需要和硬件頁(yè)的大小相同)。

下面的 RUSAGE_* 符號(hào)被傳遞給 getrusage() 函數(shù),以指定應(yīng)該為哪些進(jìn)程提供信息。

resource.RUSAGE_SELF?

傳遞給 getrusage() 以請(qǐng)求調(diào)用進(jìn)程消耗的資源,這是進(jìn)程中所有線程使用的資源總和。

resource.RUSAGE_CHILDREN?

傳遞給 getrusage() 以請(qǐng)求被終止和等待的調(diào)用進(jìn)程的子進(jìn)程所消耗的資源。

resource.RUSAGE_BOTH?

傳遞給 getrusage() 以請(qǐng)求當(dāng)前進(jìn)程和子進(jìn)程所消耗的資源。并非所有系統(tǒng)都能使用。

resource.RUSAGE_THREAD?

傳遞給 getrusage() 以請(qǐng)求當(dāng)前線程所消耗的資源。 并非所有系統(tǒng)都能使用。

3.2 新版功能.