Как получить температуру видеокарты python
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
import wmi |
def avg ( value_list ): |
num = 0 |
length = len ( value_list ) |
for val in value_list : |
num += val |
return num / length |
w = wmi . WMI ( namespace = "root \\ OpenHardwareMonitor" ) |
sensors = w . Sensor () |
cpu_temps = [] |
gpu_temp = 0 |
for sensor in sensors : |
if sensor . SensorType == u'Temperature' and not 'GPU' in sensor . Name : |
cpu_temps += [ float ( sensor . Value )] |
elif sensor . SensorType == u'Temperature' and 'GPU' in sensor . Name : |
gpu_temp = sensor . Value |
print "Avg CPU: <>" . format ( avg ( cpu_temps )) |
print "GPU: <>" . format ( gpu_temp ) |
KataWeeb commented Dec 29, 2021
how I can show only the temperature of my cpu for example?
Letronix624 commented Feb 16, 2022
memory usage rises all the time.
kshitij1235 commented Feb 22, 2022
i got to have this error
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "d:\kshitij\python\overlay\cpu_temp.py", line 11, in
w = wmi.WMI(namespace="root\OpenHardwareMonitor")
File "D:\programs\python\python3.10\lib\site-packages\wmi.py", line 1354, in connect
handle_com_error()
File "D:\programs\python\python3.10\lib\site-packages\wmi.py", line 258, in handle_com_error
raise klass(com_error=err)
wmi.x_wmi:
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
На написание поста сподвигла, казалось бы, тривиальная задача — мониторинг температуры в серверной. На эту тему существует довольно много различных решений (например, повесить видеокамеру и градусник перед ней), но большинство из крутых систем мониторинга, автоматического управления кондиционерами и т.п. стоят приличных денег. Отличие же предложенного варианта — бюджет. Около 250 российских рублей и немножко мозгов (бесценно).
Решение задачи началось, естественно, с поиска датчика температуры. Дешевого, потому что дорогих много, а руководству объяснять долго. Так же, в целях экономии, был выбран вариант USB-датчика (LAN — дороже). Где у нас самые дешевые датчики? Правильно, на ebay. Заходим туда и по запросу «usb thermometer» быстро находим вот такую игрушку, как на картинке. Заказываем, оформляем, ждем доставки.
Итак, предложенная разработчиками программа не подходит по всем параметрам. Какая альтернатива? Собственный софт для получения температуры. В базовом варианте мне нужна была программа, выдающая температуру с датчика. Все дальнейшие обработки вроде занесения в базу, отправки писем по тревоге, анализ ситуации и т.п. легко вешаются на планировщик, опрашивающий датчик каждую минуту.
Поиск в интернете легко выводит на модуль для python, называемый temper-python. Отлично! Вот уже и нормальный софт с кроссплатформенным интерпретатором. Фиг там. Этот модуль работает только под linux. И не зря в заголовок вынесена другая операционка. Мой сервер приложений работает на Windows. Но это же python! Значит, скрипт наверняка можно переделать для работы в Windows. Этим и займемся.
cd C:\Downloads\pyusb-1.0.0a2
C:\Python34\python.exe setup.py install
Распаковываем, заходим в папку bin и запускаем файл inf-wizard.exe. Эта программа автоматически сгенерирует папку драйверов под конкретное устройство и установит их.
В списке устройств для установки драйвера необходимо выбрать TEMPerV1.4 (Interface 1). Нажимаем Next, соглашаемся со всем, с чем можно согласиться и доходим до окна сохранения драйверов. Здесь лучше создать отдельную папку для temper'a, куда утилитка сложит все необходимые драйверы. После этого будет предложено установить созданный драйвер. Делаем это кнопкой Install Now.
Если все прошло успешно, то "Составное USB устройство" в Диспетчере устройств исчезнет, а появится TEMPerV1.4 (Interface 1).
В папке bin/amd64 дистрибутива libusb-win32 есть утилита testlibusb-win.exe. Запустим ее, чтобы убедиться, что нужное нам устройство видно системе. Если все хорошо и устройство видно, остается самое интересное — скрипт на python.
Как уже написано выше, за основу я взял модуль temper-python. Модуль этот навороченный, который нужно устанавливать, в котором есть конфиг для поправок, выбор Цельсия или Фаренгейта, и даже поддержка SNMP. Это все круто, но мне не нужно. Поэтому упростим все до одного скрипта, выводящего в консоль температуру. Кроме того, в temper-python есть еще и куча строк, которые нужны только в linux, a в windows попросту не работают.
Начнем с задания глобальных переменных:
По VENDOR_ID и PRODUCT_ID скрипт найдет среди всех устройств Temper и будет использовать его. TIMEOUT и OFFSET в общем-то, понятны без объяснения — таймаут доступа к датчику и поправка температуры. Поправка нужна, так как дешевый китайский датчик может ошибаться в пределах нескольких градусов, но это достаточно определить один раз по комнатному термометру и забыть.
Оставшиеся переменные относятся к api датчика и их трогать не надо.
Теперь самое главное — класс для обращения к датчику.
_control_transfer отвечает за передачу команд датчику, _interrupt_read — за чтение ответа. В get_temperature мы, собственно, все эти команды отправляем, читаем ответ и преобразуем набор цифр в человекопонятную температуру.
Чтобы все это заработало при запуске, несколько строк для инициализации:
Первая строчка ищет наш TEMPer среди устройств, вторая и третья — запрашивают температуру.
Вот, собственно, и все. Проверить работу скрипта можно стандартной командой в консоли:
На экран будет выведена температура с датчика. Что с ней делать — пусть каждый сам для себя решает.
Мне было интересно, есть ли способ получить температуру процессора и графического процессора в python. Я уже нашел способ для Linux (используя psutil.sensors_temperature() ), и я хотел найти способ для Windows.
Также был бы полезен способ определения температуры для Mac OS, но в основном мне нужен способ для Windows.
Я предпочитаю использовать только модули Python, загружаемые с помощью pip, но я нормально загружаю дополнительные вещи. Если для вашего ответа требуются дополнительные файлы, я бы предпочел, чтобы для него не требовалось слишком много файлов.
Когда я пытаюсь сделать следующее, я получаю None:
Я слышал об OpenHardwareMoniter, но для этого мне необходимо установить что-то, что не является модулем python. Я бы также предпочел не запускать скрипт от имени администратора для получения результатов.
Я также хорошо справляюсь с запуском команд Windows cmd с помощью python, но я не нашел ни одной, которая возвращает температуру процессора.
Примечание: я действительно не хочу запускать это как администратор. Если понадобится, могу, но предпочитаю не делать этого.
Изменить: я также в порядке с использованием расширений C / C ++ с Python или любого способа изменения температуры процессора в python.
Я думаю, что прямого способа добиться этого нет, некоторые производители процессоров не предоставят wmi чтобы вы знали температуру напрямую.
Вы могли бы использовать OpenHardwareMoniter.dll . Используйте динамическую библиотеку.
Во-первых, загрузите OpenHardwareMoniter .Он содержит файл с именем OpenHardwareMoniter.dll .
Установите модуль pythonnet :
Приведенный ниже код отлично работает на моем ПК (узнайте температуру процессора):
Чтобы получить температуру графического процессора, измените c.Hardware[0] к c.Hardware[1] .
Сравните результат с:
Внимание: если вы хотите получить температуру, вам нужно запустить его от имени администратора. В противном случае вы получите только значение Load .
Я сделал некоторые изменения из китайского блога
так что вы можете использовать gpiozero сначала получить температуру pip install gpiozero и from gpiozero import CPUTemperature импортировать и cpu = CPUTemperature() print(cpu.temperature)
Показания даны в тысячных долях градуса Цельсия (хотя в более старых версиях ядра это могло быть просто градусом Цельсия).
Недавно я реализовал это только в psutil для Linux.
Если ваш Linux поддерживает ACPI, чтение псевдофайла /proc/acpi/thermal_zone/THM0/temperature (путь может отличаться, я знаю, что /proc/acpi/thermal_zone/THRM/temperature в некоторых системах) должно это сделать. Но я не думаю, что есть способ, который работает в каждой системе Linux в мире, поэтому вам нужно будет более конкретно указать, какой именно Linux у вас есть! -)
Чтение файлов в / sys / class / hwmon / hwmon * / temp1_ * сработало для меня, но AFAIK нет стандартов для того, чтобы делать это чисто. В любом случае, вы можете попробовать это и убедиться, что оно предоставляет такое же количество процессоров, как показано утилитой cmdline " сенсоры ", и в этом случае вы можете считать, что это надежно.
py-cputemp - это, по сути, тонкий слой над / proc / acpi / Thermal_zone. Изначально это не сработало для меня, пока я не понял, что мне нужно включить ACPI в моем BIOS. Я отключил его, потому что решил, что мне не нужно управление питанием на сервере. Спасибо за ответ; Я принимаю это, потому что он был опубликован первым и заставил меня задуматься об источнике моей проблемы.
Я предпочитаю gpiozero из gpiozero import CPUTemperature, LoadAverage cpu = CPUTemperature () print («Температура процессора составляет% s»% cpu.temperature) load = LoadAverage () print («Температура процессора составляет% s»% load.load_average)
Заботьтесь pyspectator в pip
Я пробовал код, который вы предоставили, но, прежде всего, импорт, похоже, из pyspectator.processor import Cpu, и если это python3, поскольку предупреждение говорит, что команда печати должна использовать скобки . в любом случае это не работает для меня, cpu.load отображается правильно но температура всегда НЕТ :(
В зависимости от вашего дистрибутива Linux вы можете найти файл /proc , содержащий эту информацию. Например, эта страница предлагает /proc/acpi/thermal_zone/THM/temperature .
В качестве альтернативы вы можете установить пакет lm- sensor , а затем установить PySensors (привязка python для libsensors).
Вы можете попробовать модуль PyI2C , он может читать прямо из ядра.
Sysmon отлично работает. Красиво сделанный, он делает гораздо больше, чем просто измеряет температуру процессора. Это программа командной строки, которая записывает все измеренные данные в файл. Кроме того, он имеет открытый исходный код и написан на Python 2.7.
Я бы подумал над решением SDsolar выше, немного изменил код, и теперь он показывает не только одно значение. До тех пор, пока в цикле while вы не получите фактическое значение температуры процессора.
В системах Linux:
Установите модуль pyspectator:
Поместите этот код в файл cpu-temp.py
Для систем Linux (пробовал на Ubuntu 18.04)
Установите модуль acpi, выполнив sudo apt install acpi
Запуск acpi -V должен дать вам массу информации о вашей системе. Теперь нам просто нужно получить значение температуры через python.
percentage Переменная даст вам температуру. Итак, сначала мы берем вывод acpi -V команды в текстовый файл, а затем читаем его. Нам нужно преобразовать его в целое число, поскольку все данные имеют тип String.
Эта библиотека пригодится вам, если вы захотите получить какие-либо данные о конкретном процессе или комплектующих. Также появится возможность управлять ими в зависимости от их состояния.
Какую же информацию можно получить? Можно достать данные о процессоре с момента загрузки, в том числе о том, сколько системных вызовов и контекстных переключателей он сделал:
Также есть возможность извлечь информацию о диске и состоянии памяти:
Можно даже получить данные о времени автономной работы или узнать текущую температуру процессора:
Одной из самых классных фишек этой библиотеки является то, что можно получить доступ к процессам и их статистике. Однако есть процессы, которые требуют наличия прав администратора. В противном случае после попытки доступа произойдет сбой с ошибкой "AccessDenied". Давайте протестируем эту функцию.
Сначала создадим экземпляр, предоставляя требуемый идентификатор процесса:
Затем можно получить доступ ко всей информации и статистике процесса:
Создадим функцию, которая связывает открытые порты соединений с процессами. Для начала нужно перебрать все открытые соединения.
Обратим внимание на то, что одним из возвращаемых атрибутов является "pid".
Можно связать это с именем процесса:
Но не стоит забывать, что если пользователь не обладает правами администратора, он не сможет получить доступ к определенным процессам. Проверим выходные данные. Он вернет много данных, поэтому выведем только первое значение:
Как можно увидеть, первое значение – это имя процесса, второй – данные соединения: IP-адрес, порт, статус и так далее. Данная функция очень полезна для понимания того, какие порты используются конкретными процессами.
Psutil – отличная библиотека, предназначенная для управления системой. Она полезна для управления ресурсами как частью потока кода.
Читайте также: