Python で CPU 温度を取得する
この記事の主な目的は、Python の pythonnet
ライブラリを使用して CPU 温度を読み取って表示する方法を示すことです。
Python で CPU 温度を取得する
設計しているアプリケーションの種類によっては、プログラムが実行されているマシンのリソースを監視したい場合があります。
この状況は、さまざまな理由で発生する可能性があります。 おそらく、システム リソースが特定のしきい値に達したときに、プログラムが特定の方法で動作する必要があるでしょう。
ユースケースは、プログラムごとに異なる場合があります。
これらのシステム リソースのうち、特定のアプリケーションやユース ケースでは CPU 温度が非常に重要です。
おそらく、プログラムが CPU に負担をかけすぎて、多くの不要なリソースを占有している可能性があります。 この問題を軽減するための対策を講じる必要がある場合があります。そのため、さまざまなマシン コンポーネントの温度を監視する必要があり、CPU はその 1つです。
この特定の問題を解決するために、OpenHardwareMonitor が提供する DLL (Dynamic Link Libraries) を使用できます。
このセクションは、次の部分に分けることができます。
- インストール
- 実装
- モニター
インストール
まず、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
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