Python Obtener la temperatura de la CPU

Salman Mehmood 21 junio 2023
Python Obtener la temperatura de la CPU

El objetivo principal de este artículo es demostrar cómo leer y mostrar la temperatura de la CPU con la ayuda de la biblioteca pythonnet en Python.

Python Obtener la temperatura de la CPU

Según el tipo de aplicación que esté diseñando, es posible que desee monitorear los recursos de la máquina en la que se ejecuta el programa.

Esta situación puede surgir debido a un montón de razones. Tal vez necesite que su programa actúe de cierta manera cuando los recursos del sistema alcancen un cierto umbral.

Los casos de uso pueden ser diferentes de un programa a otro.

De estos recursos del sistema, la temperatura de la CPU tiene una importancia significativa en aplicaciones y casos de uso específicos.

Tal vez su programa esté sobrecargando demasiado la CPU y acaparando muchos recursos innecesarios. Es posible que desee tomar medidas para mitigar este problema, por lo que probablemente necesite controlar la temperatura de los diferentes componentes de la máquina, siendo la CPU uno de ellos.

Para resolver este problema específico, podemos usar las DLL (Bibliotecas de enlace dinámico) proporcionadas por OpenHardwareMonitor.

Esta sección se puede dividir en las siguientes partes:

  1. Instalación
  2. Implementación
  3. Supervisar

Instalación

En primer lugar, necesitamos descargar pythonnet para poder interactuar con las DLL. Para hacerlo, ejecuta el siguiente comando en tu terminal.

pip install pythonnet

Esto dará el siguiente resultado:

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

Después de haber instalado con éxito pythonnet, es hora de descargar OpenHardwareMonitor. Descarga el software desde aquí.

Una vez que haya terminado de descargar, instale la aplicación. Después de lo cual:

  • Vaya al directorio donde instaló OpenHardwareMonitor.
  • Busque OpenHardwareMonitorLib.dll de los archivos presentes dentro de la carpeta.
  • Copie en la carpeta que desee, preferiblemente donde esté almacenada su secuencia de comandos de python.

Implementación

Una vez que se completa el proceso de instalación, es hora de implementar el código real.

Considere el siguiente código:

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)

Usando el módulo clr, podemos interactuar con la DLL .NET llamada OpenHardwareMonitorLib.dll. Podemos continuar usando sus funciones y atributos en nuestro código Python y finalmente leer la temperatura de la CPU y otros componentes que deseemos ver.

Para obtener una descripción detallada de lo que representa cada atributo y su función, puede consultar la documentación de OpenHardwareMonitor en Github.

Para cualquier otra funcionalidad personalizada, se recomienda mirar el código para obtener una mejor comprensión y comprensión del funcionamiento interno del código.

Monitor

Después de haber escrito el código, es hora de ejecutar el programa. Recuerde que debe ejecutar este script como administrador; de lo contrario, el código no se ejecutará correctamente y es posible que no muestre correctamente las lecturas necesarias o que no las muestre en absoluto.

Abra el símbolo del sistema o cualquier terminal que elija y ejecute el script. Para el código anterior, se muestra el siguiente resultado cuando se ejecuta como administrador:

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

Artículo relacionado - Python CPU