Skip to content

PythonでCPUやGPUの状態をモニタリングするアプリケーション (pythonnet <= 2.5.2)

Notifications You must be signed in to change notification settings

ppza53893/PythonMonitor

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

52 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PythonMonitor

趣味で作ったアプリケーションです。qiitaで記事にもしてます。

特徴

  • バッテリー、CPU情報、ネットワーク情報などが一度の画面で見れる
    • NvidiaGPU搭載のPCならGPUの電力やファン速度、温度なども表示
  • 使用率がカラーでわかる(※一部)
  • グラフ化に対応
  • Windowsのテーマに追従してテーマが変わる(設定で無効可)

見本

  

名前 内容
AC Status ACプラグが接続されているかどうかの状態です。
- Offline: 未接続
- Online: 接続
Unknown: 不明
Battery バッテリーの残量
未接続かつ残り35%を切ると、接続してくださいという通知を、
接続かつ95%以上のときは十分に充電されている
というのをWindowsの通知センターを経由して送ります。
Battery Status バッテリーの残量をがどの程度かを表示します。
詳細はこちら(BatteryFlag)
CPU Temperature CPUの温度を表示します。画像中は1つだけですが、CPUによってはクリックでコア毎の温度も表示します。
CPU Usage CPU使用率。クリックで各スレッドの使用率も表示します
CPU Bus CPUバス速度を表示します。クリックで各コアのクロック周波数も表示します。
CPU Power CPUの消費電力を表示します。クリックで各コアの消費電力も表示します。
Disk Usage Cドライブの使用率を表示します。
Memory Usage メモリの使用率を表示します。
Running Processes 起動中のプログラムの数を表示します。
Network(Sent / Received) ネットワーク使用率(無線 or 有線)をKB/s単位で表示します。

Nvidia GPU搭載の場合は上段3つが次のようになります。バッテリー搭載PCであれば一応選択もできるようにしています。

名前 内容
GPU Fan GPUファンの回転速度を表示します。
nvidia-smiがあれば色付きになります(pythonwからは無効)。
GPU Power 現在のGPUの消費電力を表示します。
nvidia-smiがあれば色付きになります(pythonwからは無効)
GPU RAM Usage 現在のGPUのメモリ使用率を表示します。
GPU Temperature GPUの温度を表示します。

コマンド

            
  • Ctrl + Q …プログラムを終了します
  • Ctrl + P …最前面に固定を解除します。デフォルトでは固定されていません。再び押すと元に戻ります。
  • Ctrl + H …ヒントを表示(上図)します。起動時は必ず出てきます。
  • Ctrl + S …現在のステータスをjson形式で保存します。保存先はpyファイルと同じ場所です。
  • Ctrl + {J, M, H, K} …ウィンドウを移動します。Ctrl+Jで上へ、Ctrl+Mで下、Ctrl+Hで左端、Ctrl+Kで右端に行きます。
  • Ctrl + R …ウィンドウが半透明になります。再び押すと解除されます。
  • Ctrl + B …更新間隔を0.5sにします。起動時は1s間隔です。再び押すと元に戻ります。
  • Ctrl + T …タイトル表示を「CPU使用率、CPU温度」、または通常のタイトルに切り替えます。

グラフ表示

            

Valueが文字列でないものについては、右クリックすると「選択中のデータのグラフを表示」というものを押すことができます。 これをクリックすると、別ウィンドウでグラフが表示されます。

            

複数選択状態であれば、まとめて表示されます。

            

ちなみに、こちらにもコマンドがあり、Ctrl + PCtrl + Rがあります。意味についてはメインウィンドウと同様です。

注意点

  • Pythonの仕様(GIL)上、グラフが多すぎるとラグが発生します。メインウィンドウのデータ更新はほぼ1s間隔ですが、グラフが多いと結構重くなるので注意してください。
  • グラフウィンドウは最大10個まで、1画面で表示できるグラフの最大数も10個です。

導入手順

Python 3.7、3.8で動作確認済みです。3.9はpythonnetが動かないため、Anaconda等で3.7 or 3.8の環境を作ってください。

pip install pythonnet matplotlib

1.DLLのダウンロード

Open Hardware Monitorをダウンロードして、解凍した中身のOpenHardwareMonitorLibをpythonコードのあるディレクトリ上に置きます

2. 管理者権限で起動

ここについては色々あります。一応3パターン紹介しておきます

1. cmdを管理者権限で起動してpython(or pythonw)からpytaskmgr.pyを実行

2. タスクスケジューラを使ってログオン時に起動するようにする

登録とかはここを参考に設定してください。
プログラムの操作ではプログラムをpythonw.exe(Anaconda使っているひとは環境のpythonw.exeの絶対パス)に、引数はpytaskmgr.pyのパスを指定します。 (2021/10/29) ノートPCでこのアプリケーションを使う場合、タスクスケジューラの「コンピューターの電源がバッテリに切り替わった場合は停止する」はOFFにしてください。そうしないとACプラグを抜くと強制終了してしまいます。

3. ショートカットを使う

バッチファイルで

pythonw.exe pytaskmgr.py

を作成し(引数等については1と同じ)作製したbatファイルのショートカットを作成、ショートカットの詳細設定で管理者権限で起動にチェックを入れます。

設定

コマンドラインから起動する場合、オプションが選べます。

名前 内容
--gpu GPU使用率 (Engine 3D)も表示するかどうか設定します。値はPerformanceCounterからとってきているので、有効にした状態で起動すると更新間隔が遅くなります。
--theme アプリのテーマを指定できます。種類はlight, dark, systemの3種類で、systemは使っているwindowsのシステムに追従する形になります。
Light:

使ったこと

趣味をつめこんだのでいろいろバックでやってます。

  • COMエラー回避(tkinter & clr & matplotlibで衝突するため)
    • pytaskmgr.py
  • レジストリからの配色取得、Windowsのテーマ取得
    • モードに応じた自動配色(グラフも対応してます)
    • src/systemAPI/registry.py, src/utils/table.py
  • Tkinterのスタイル改造
    • src/utils/table.py
  • 高Dpi対応
    • src/systemAPI/c_api.py
  • Dpi変化によるサイズ(画面サイズ、フォント等も含め)の自動変化
    • DPIの異なる画面に映る/画面の拡大を変化した後自動リサイズします
    • src/systemAPI/c_api.py
  • 管理者権限かの判断
    • src/windows.py
  • nvidia-smiからのデータ取得(色を付けるため、データの値はOpenhardwareMonitorからです。)
    • src/systemAPI/gpu.py
  • GPU使用率の取得(PerformanceCounter + regex)
    • src/systemAPI/gpu.py
  • ネットワーク速度取得
    • src/systemAPI/network.py
  • バッテリー状態取得
    • src/systemAPI/powerline.py
  • メッセージボックス表示
    • src/systemAPI/win_forms.py
  • 表示するグラフ数に応じたレイアウト変更
    • src/mpl_graph.py

バグ

  • マルチGPUは手元に環境がないので、もしかしたらエラーが出るかもしれません。

何かバグがあればissueに投げてください。時間があれば直していきます。

今後

  • 殆どがOpenHardwareMonitorに依存しているので、フルスクラッチで自分で書こうかなとも考えてます
  • pythonでの限界を感じます…

About

PythonでCPUやGPUの状態をモニタリングするアプリケーション (pythonnet <= 2.5.2)

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages