36.13. リソース—リソース使用情報—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/2.7/library/resource
移動先:案内検索

36.13。 資源 —リソース使用情報

このモジュールは、プログラムによって使用されるシステムリソースを測定および制御するための基本的なメカニズムを提供します。

シンボリック定数は、特定のシステムリソースを指定し、現在のプロセスまたはその子に関する使用情報を要求するために使用されます。

エラーに対して1つの例外が定義されています。

exception resource.error
以下で説明する関数は、基盤となるシステムコールが予期せず失敗した場合に、このエラーを発生させる可能性があります。

36.13.1。 リソース制限

以下に説明する setrlimit()関数を使用して、リソースの使用を制限できます。 各リソースは、ソフト制限とハード制限の2つの制限によって制御されます。 ソフト制限は現在の制限であり、時間の経過とともにプロセスによって増減する可能性があります。 ソフト制限がハード制限を超えることはありません。 ハード制限は、ソフト制限よりも大きい任意の値に下げることができますが、上げることはできません。 (スーパーユーザーの有効なUIDを持つプロセスのみがハード制限を上げることができます。)

制限できる特定のリソースは、システムによって異なります。 これらについては、 getrlimit(2)のマニュアルページで説明されています。 以下にリストされているリソースは、基盤となるオペレーティングシステムがそれらをサポートしている場合にサポートされます。 オペレーティングシステムでチェックまたは制御できないリソースは、これらのプラットフォームのこのモジュールでは定義されていません。

resource.RLIM_INFINITY
無制限のリソースの制限を表すために使用される定数。
resource.getrlimit(resource)
リソースの現在のソフト制限とハード制限を持つタプル(soft, hard)を返します。 無効なリソースが指定された場合はValueErrorを発生させ、基盤となるシステムコールが予期せず失敗した場合はエラーを発生させます。
resource.setrlimit(resource, limits)

リソースの消費の新しい制限を設定します。 limits 引数は、新しい制限を記述する2つの整数のタプル(soft, hard)である必要があります。 RLIM_INFINITY の値を使用して、無制限の制限を要求できます。

無効なリソースが指定された場合、新しいソフト制限がハード制限を超えた場合、またはプロセスがハード制限を引き上げようとした場合に、ValueErrorを上げます。 そのリソースのハード制限またはシステム制限が無制限でない場合に RLIM_INFINITY の制限を指定すると、ValueErrorになります。 スーパーユーザーの有効なUIDを持つプロセスは、無制限を含む任意の有効な制限値を要求できますが、要求された制限がシステムによって課された制限を超えると、ValueErrorは引き続き発生します。

setrlimitは、基盤となるシステムコールが失敗した場合にも、エラーを発生させる可能性があります。

これらのシンボルは、以下で説明する setrlimit()および getrlimit()関数を使用して消費を制御できるリソースを定義します。 これらのシンボルの値は、Cプログラムで使用される定数とまったく同じです。

getrlimit(2)のUnixマニュアルページには、利用可能なリソースがリストされています。 すべてのシステムが同じリソースを示すために同じ記号または同じ値を使用するわけではないことに注意してください。 このモジュールは、プラットフォームの違いを隠そうとはしません—プラットフォームに定義されていないシンボルは、そのプラットフォームのこのモジュールからは利用できません。

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
RLIMIT_NOFILE のBSD名。
resource.RLIMIT_MEMLOCK
メモリにロックされる可能性のある最大アドレス空間。
resource.RLIMIT_VMEM
プロセスが占有する可能性のあるマップメモリの最大領域。
resource.RLIMIT_AS
プロセスが使用できるアドレス空間の最大領域(バイト単位)。


36.13.2。 リソースの使用

これらの関数は、リソース使用情報を取得するために使用されます。

resource.getrusage(who)

この関数は、 who パラメーターで指定されているように、現在のプロセスまたはその子のいずれかによって消費されるリソースを記述するオブジェクトを返します。 who パラメーターは、以下で説明するRUSAGE_*定数のいずれかを使用して指定する必要があります。

戻り値のフィールドはそれぞれ、特定のシステムリソースがどのように使用されたかを示します。 実行に費やされた時間は、ユーザーモードまたはプロセスがメインメモリからスワップアウトされた回数です。 一部の値は、内部のクロックティックに依存しています。 プロセスが使用しているメモリの量。

下位互換性のために、戻り値は16要素のタプルとしてもアクセスできます。

戻り値のフィールドru_utimeru_stimeは、それぞれユーザーモードでの実行に費やされた時間とシステムモードでの実行に費やされた時間を表す浮動小数点値です。 残りの値は整数です。 これらの値の詳細については、 geotrusage(2)のマニュアルページを参照してください。 簡単な要約をここに示します。

索引

分野

リソース

0

ru_utime

ユーザーモードでの時間(フロート)

1

ru_stime

システムモードでの時間(フロート)

2

ru_maxrss

常駐セットの最大サイズ

3

ru_ixrss

共有メモリサイズ

4

ru_idrss

非共有メモリサイズ

5

ru_isrss

非共有スタックサイズ

6

ru_minflt

I / Oを必要としないページフォールト

7

ru_majflt

I / Oを必要とするページフォールト

8

ru_nswap

スワップアウトの数

9

ru_inblock

入力操作をブロックする

10

ru_oublock

ブロック出力操作

11

ru_msgsnd

送信されたメッセージ

12

ru_msgrcv

受信したメッセージ

13

ru_nsignals

受信した信号

14

ru_nvcsw

自発的なコンテキストスイッチ

15

ru_nivcsw

非自発的なコンテキストスイッチ

この関数は、無効な who パラメーターが指定された場合、ValueErrorを発生させます。 また、異常な状況ではエラー例外が発生する場合があります。

バージョン2.3で変更:返されたオブジェクトの属性として値へのアクセスを追加しました。

resource.getpagesize()
システムページのバイト数を返します。 (これは、ハードウェアのページサイズと同じである必要はありません。)

次のRUSAGE_*シンボルが getrusage()関数に渡され、どのプロセス情報を提供するかを指定します。

resource.RUSAGE_SELF
RUSAGE_SELF は、プロセス自体にのみ関連する情報を要求するために使用する必要があります。
resource.RUSAGE_CHILDREN
getrusage()に渡して、呼び出しプロセスの子プロセスのリソース情報を要求します。
resource.RUSAGE_BOTH
getrusage()に渡して、現在のプロセスと子プロセスの両方で消費されているリソースを要求します。 すべてのシステムで利用できるとは限りません。