Python で CPU 温度を取得する

Salman Mehmood 2023年6月21日
Python で CPU 温度を取得する

この記事の主な目的は、Python の pythonnet ライブラリを使用して CPU 温度を読み取って表示する方法を示すことです。

Python で CPU 温度を取得する

設計しているアプリケーションの種類によっては、プログラムが実行されているマシンのリソースを監視したい場合があります。

この状況は、さまざまな理由で発生する可能性があります。 おそらく、システム リソースが特定のしきい値に達したときに、プログラムが特定の方法で動作する必要があるでしょう。

ユースケースは、プログラムごとに異なる場合があります。

これらのシステム リソースのうち、特定のアプリケーションやユース ケースでは CPU 温度が非常に重要です。

おそらく、プログラムが CPU に負担をかけすぎて、多くの不要なリソースを占有している可能性があります。 この問題を軽減するための対策を講じる必要がある場合があります。そのため、さまざまなマシン コンポーネントの温度を監視する必要があり、CPU はその 1つです。

この特定の問題を解決するために、OpenHardwareMonitor が提供する DLL (Dynamic Link Libraries) を使用できます。

このセクションは、次の部分に分けることができます。

  1. インストール
  2. 実装
  3. モニター

インストール

まず、DLL とのインターフェースを可能にするために、pythonnet をダウンロードする必要があります。 これを行うには、ターミナルで次のコマンドを実行します。

pip install pythonnet

これにより、次の出力が得られます。

Collecting pythonnet
  Downloading pythonnet-3.0.0.post1-py3-none-any.whl (279 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 279.4/279.4 kB 639.3 kB/s eta 0:00:00
Requirement already satisfied: clr-loader<0.3.0,>=0.2.2 in c:\program files\python310\lib\site-packages (from pythonnet) (0.2.4)
Requirement already satisfied: cffi>=1.13 in c:\program files\python310\lib\site-packages (from clr-loader<0.3.0,>=0.2.2->pythonnet) (1.15.1)
Requirement already satisfied: pycparser in c:\program files\python310\lib\site-packages (from cffi>=1.13->clr-loader<0.3.0,>=0.2.2->pythonnet) (2.21)
Installing collected packages: pythonnet
Successfully installed pythonnet-3.0.0.post1

pythonnet を正常にインストールしたら、OpenHardwareMonitor をダウンロードします。 こちらからソフトウェアをダウンロードしてください。

ダウンロードが完了したら、アプリケーションをインストールします。 その後:

  • OpenHardwareMonitor をインストールしたディレクトリに移動します。
  • フォルダ内にあるファイルから OpenHardwareMonitorLib.dll を見つけます。
  • 目的のフォルダー (できれば Python スクリプトが保存されている場所) にコピーします。

実装

インストール プロセスが完了したら、実際のコードを実装します。

次のコードを検討してください。

import clr  # package pythonnet, not clr

openhardwaremonitor_sensortypes = [
    "Voltage",
    "Clock",
    "Temperature",
    "Load",
    "Fan",
    "Flow",
    "Control",
    "Level",
    "Factor",
    "Power",
    "Data",
    "SmallData",
]


def initialize_openhardwaremonitor():
    file = "D:\\Path_TO_DLL\\OpenHardwareMonitorLib.dll"

    clr.AddReference(file)

    from OpenHardwareMonitor import Hardware

    handle = Hardware.Computer()
    handle.MainboardEnabled = True
    handle.CPUEnabled = True
    handle.RAMEnabled = True
    handle.GPUEnabled = True
    handle.HDDEnabled = True

    handle.Open()
    return handle


def fetch_stats(handle):
    for i in handle.Hardware:
        i.Update()
        for sensor in i.Sensors:
            parse_sensor(sensor)

        for j in i.SubHardware:
            j.Update()
            for subsensor in j.Sensors:
                parse_sensor(subsensor)


def parse_sensor(sensor):
    hardwaretypes = openhardwaremonitor_hwtypes

    if sensor.Value is not None:
        if str(sensor.SensorType) == "Temperature":
            print(
                u"%s %s Temperature Sensor #%i %s - %s\u00B0C"
                % (
                    hardwaretypes[sensor.Hardware.HardwareType],
                    sensor.Hardware.Name,
                    sensor.Index,
                    sensor.Name,
                    sensor.Value,
                )
            )


if __name__ == "__main__":
    print("OpenHardwareMonitor:")
    HardwareHandle = initialize_openhardwaremonitor()
    fetch_stats(HardwareHandle)

clr モジュールを使用して、OpenHardwareMonitorLib.dll という名前の .NET DLL とインターフェイスできます。 Python コードでその関数と属性を引き続き使用し、最終的に CPU の温度と表示したいその他のコンポーネントを読み取ることができます。

各属性の意味とその機能の詳細な概要については、Github の OpenHardwareMonitor の ドキュメント を参照してください。

その他のカスタム機能については、コードを見て、コードの内部動作をよりよく理解し、洞察することをお勧めします。

モニター

コードを書いたら、プログラムを実行します。 このスクリプトは管理者として実行する必要があることに注意してください。 そうしないと、コードが正しく実行されず、必要な読み取り値を正しく表示できないか、まったく表示されない可能性があります。

コマンド プロンプトまたは任意のターミナルを開き、スクリプトを実行します。 上記のコードを管理者として実行すると、次の出力が表示されます。

OpenHardwareMonitor:                                                                                                    CPU Intel Core i7-4800MQ Temperature Sensor #0 CPU Core #1 - 60.0°C                                                     CPU Intel Core i7-4800MQ Temperature Sensor #1 CPU Core #2 - 66.0°C                                                     CPU Intel Core i7-4800MQ Temperature Sensor #2 CPU Core #3 - 58.0°C                                                     CPU Intel Core i7-4800MQ Temperature Sensor #3 CPU Core #4 - 58.0°C                                                     CPU Intel Core i7-4800MQ Temperature Sensor #4 CPU Package - 66.0°C                                                     GpuNvidia NVIDIA Quadro K1100M Temperature Sensor #0 GPU Core - 43.0°C                                                  HDD ST500LT012-9WS142 Temperature Sensor #0 Temperature - 37.0°C
著者: Salman Mehmood
Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn

関連記事 - Python CPU