Pythonのresourceモジュールの使い方を分かりやすく解説する

スポンサーリンク

この記事を始める前に、resourceモジュールはUNIX特有のパッケージであり、POSIX、つまりWindowsオペレーティングシステムでは動作しないことに注意することが重要です。

スポンサーリンク

リソースモジュールの紹介

システム監視とリソースを扱う過程で、コントロールパネルにある全てのシステムログを手動で調べるよりも、システム情報を監視する方が良いのではないかと思うことがあります。

そのコンセプトに関連したアイデアを形成するためにもう少し進むと、これは可能かもしれない、そして、スクリプトの形で完全に実現可能であることを少し理解するようになりました。

さて、もう少し考えてみると、これは素晴らしいアイデアです。

python-crontabsched`、dateutilモジュールでスクリプトを自動化すると、毎日特定の間隔で自動更新ログがスケジュールされるので、特定の時間に手動で情報を受信する必要がありません。

しかし、自動化を試みる前に、まずこの情報を提供できるものが必要で、そこで resource モジュールの出番となる。

システムリソースに関する基本的な情報と、それを制御する機能を提供するために使用される resource モジュールは、まさに私たちが求めているものです。

では、本題に入り、このモジュールの作業を始めましょう。

Pythonでresourceモジュールを使う


Python の標準ライブラリの一部である resource モジュールは個別にインストールする必要がないモジュールで、Python がインストールされた新しいサーバーやクライアントでこのモジュールを使うことは問題なく自動的にできるはずです。

ただし、pythonのバージョンによっては、resourceモジュールのインストールに問題があるようですので、pipコマンドを使用してresourceモジュールをインストールすることを推奨します。

pip install python-resources

さて、これでインストールは終わりですが、必要な情報を取得するためにコンポーネントを使用する必要があるので、早速インポートしてみましょう

1.0 エコシステムのセットアップ

resource` モジュールが提供する機能を使い始める前に、まずこのモジュールをインポートする必要があります。

# Importing functions from the resource module
from resource import *
import time

モジュールをインポートしたので、システムリソースの情報を取得し始めることができます。

1.1 基礎となるパラメータの使用法

モジュールの機能は主に、必要な情報を返す関数に提供されるパラメータに依存します。

これらのパラメーターのいくつかの例を挙げます。

  • resource.RUSAGE_SELF – 呼び出しプロセスによって消費されるリソース。
  • resource.RUSAGE_CHILDREN – 子プロセスによって消費されるリソース。
  • resource.RUSAGE_BOTH – 現在のプロセスと子プロセスによって消費されるリソース。
  • resource.RUSAGE_THREAD – 現在のスレッドによって消費されるリソース。

これらの RUSAGE_BOTHシンボルはすべてgetrusage()` 関数に渡され、どのプロセスの情報が要求されたかを指定します。

1.2 デモンストレーション

# Function used to retrieve information regarding
## Resources consumed by the current process or it's children
### Non CPU bound task
time.sleep(3)
 
# Calling for the resources consumed by the current process.
print(getrusage(RUSAGE_SELF))
 
### CPU bound task
for i in range(10**8):
    _ = 1+1
 
# Calling for the resources consumed by the current process.
print(getrusage(RUSAGE_SELF))
 
# Output
# resource.struct_rusage(ru_utime=0.016, ru_stime=0.004, ru_maxrss=5216, ru_ixrss=0, ru_idrss=0, ru_isrss=0, ru_minflt=732, ru_majflt=1, ru_nswap=0, ru_inblock=80, ru_oublock=0, ru_msgsnd=0, ru_msgrcv=0, ru_nsignals=0, ru_nvcsw=6, ru_nivcsw=9)
 
# resource.struct_rusage(ru_utime=14.176, ru_stime=0.02, ru_maxrss=5140, ru_ixrss=0, ru_idrss=0, ru_isrss=0, ru_minflt=730, ru_majflt=0, ru_nswap=0, ru_inblock=0, ru_oublock=0, ru_msgsnd=0, ru_msgrcv=0, ru_nsignals=0, ru_nvcsw=1, ru_nivcsw=177)

受け取った出力はリソースクラスのオブジェクトの形で、そのオブジェクトの構造体の中に要求されたすべての必要な情報が含まれています。

構造体内のこれらの出力値は、それぞれユーザーモードとシステムモードでの実行に費やされた時間を表す浮動小数点値です。

各パラメータの詳細を知りたい場合や、モジュール全体について調べたい場合は、ドキュメントページの getrusage() セクションにアクセスするとよいでしょう。

1.3 前へ進む

このモジュールで作業することで、resourceモジュールで取得できるリソースについて知ることができたはずです。

このモジュールを拡張してスクリプトに実装すると、システムプロセスを監視し、一定間隔でリソースの消費量をチェックすることができます

このようなアイデアを実現するには、システムプロセスを扱う psutilsysos モジュールなど、他の様々なモジュールを調べてみるのが賢明でしょう。

チェックを自動的に行うには、 dateutilschedpython-crontab モジュールを使用するとよいでしょう。

まとめ

このモジュールのユースケースは、システムの機能やプロセスを監視するスクリプトの作成に関わるものがほとんどです。

前のセクションで述べたように、システムプロセス、テスト、監視を行いたい場合、調べるべき記事は psutil, sys, os, and the dateutil モジュールです。

参考文献

  • 公式リソース ドキュメント
  • StackOverflow : リソースモジュールのインストール
  • StackOverflow : リソースモジュールのインストール Windows OS リソースモジュール
タイトルとURLをコピーしました