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

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

resource —リソース使用情報


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

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

システムコールが失敗すると、 OSError が発生します。

exception resource.error

OSError の非推奨のエイリアス。

バージョン3.3で変更: PEP 3151 に続いて、このクラスは OSError のエイリアスになりました。

リソース制限

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

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

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

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

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

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

VxWorksは、 RLIMIT_NOFILE の設定のみをサポートします。

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

setrlimit()getrlimit()を1つの関数に組み合わせ、任意のプロセスのリソース制限の取得と設定をサポートします。 pid が0の場合、呼び出しは現在のプロセスに適用されます。 resource および limits は、 limits がオプションであることを除いて、 setrlimit()と同じ意味です。

limits が指定されていない場合、関数はプロセス pidresource 制限を返します。 limits を指定すると、プロセスの resource 制限が設定され、以前のリソース制限が返されます。

pid が見つからない場合は ProcessLookupError を発生させ、ユーザーがプロセスのCAP_SYS_RESOURCEを持っていない場合は PermissionError を発生させます。

バージョン3.4の新機能。

これらのシンボルは、以下で説明する 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
プロセスが使用できるアドレス空間の最大領域(バイト単位)。
resource.RLIMIT_MSGQUEUE

POSIXメッセージキューに割り当てることができるバイト数。

バージョン3.4の新機能。

resource.RLIMIT_NICE

プロセスの適切なレベルの上限(20 --rlim_curとして計算)。

バージョン3.4の新機能。

resource.RLIMIT_RTPRIO

リアルタイムの優先順位の上限。

バージョン3.4の新機能。

resource.RLIMIT_RTTIME

プロセスがブロッキングシステムコールを作成せずにリアルタイムスケジューリングで費やすことができるCPU時間の制限時間(マイクロ秒単位)。

バージョン3.4の新機能。

resource.RLIMIT_SIGPENDING

プロセスがキューに入れることができるシグナルの数。

バージョン3.4の新機能。

resource.RLIMIT_SBSIZE

このユーザーのソケットバッファー使用量の最大サイズ(バイト単位)。 これにより、このユーザーがいつでも保持できるネットワークメモリの量、つまりmbufの量が制限されます。

バージョン3.4の新機能。

resource.RLIMIT_SWAP

このユーザーIDのすべてのプロセスによって予約または使用される可能性のあるスワップスペースの最大サイズ(バイト単位)。 この制限は、vm.overcommitsysctlのビット1が設定されている場合にのみ適用されます。 このsysctlの完全な説明については、 Tuning(7)を参照してください。

バージョン3.4の新機能。

resource.RLIMIT_NPTS

このユーザーIDによって作成される疑似端末の最大数。

バージョン3.4の新機能。


リソースの使用

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

resource.getrusage(who)

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

簡単な例:

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))

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

下位互換性のために、戻り値は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 を発生させます。 また、異常な状況ではエラー例外が発生する場合があります。

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

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

resource.RUSAGE_SELF
getrusage()に渡して、呼び出しプロセスによって消費されるリソースを要求します。これは、プロセス内のすべてのスレッドによって使用されるリソースの合計です。
resource.RUSAGE_CHILDREN
getrusage()に渡して、終了して待機している呼び出しプロセスの子プロセスによって消費されるリソースを要求します。
resource.RUSAGE_BOTH
getrusage()に渡して、現在のプロセスと子プロセスの両方で消費されているリソースを要求します。 すべてのシステムで利用できるとは限りません。
resource.RUSAGE_THREAD

getrusage()に渡して、現在のスレッドによって消費されているリソースを要求します。 すべてのシステムで利用できるとは限りません。

バージョン3.2の新機能。