Как узнать температуру процессора с помощью psutil в Python

Хочешь уверенно проходить IT-интервью?

Готовься к IT-собеседованиям уверенно с AI-тренажёром T1!

Мы понимаем, как сложно подготовиться: стресс, алгоритмы, вопросы, от которых голова идёт кругом. Но с AI тренажёром всё гораздо проще.

💡 Почему Т1 тренажёр — это мастхэв?

  • Получишь настоящую обратную связь: где затык, что подтянуть и как стать лучше
  • Научишься не только решать задачи, но и объяснять своё решение так, чтобы интервьюер сказал: "Вау!".
  • Освоишь все этапы собеседования, от вопросов по алгоритмам до диалога о твоих целях.

Зачем листать миллион туториалов? Просто зайди в Т1 тренажёр, потренируйся и уверенно удиви интервьюеров. Мы не обещаем лёгкой прогулки, но обещаем, что будешь готов!

Реклама. ООО «Смарт Гико», ИНН 7743264341. Erid 2VtzqwP8vqy


Библиотека psutil предназначена для получения информации о запущенных процессах и использовании системы (процессор, память, диски, сеть).


psutil
Эта библиотека пригодится вам, если вы захотите получить какие-либо данные о конкретном процессе или комплектующих. Также появится возможность управлять ими в зависимости от их состояния.

Получение информации о комплектующих ПК с помощью библиотеки psutil

Какую же информацию можно получить? Можно достать данные о процессоре с момента загрузки, в том числе о том, сколько системных вызовов и контекстных переключателей он сделал:

In [1]: psutil.cpu_stats()
Out[1]: scpustats(
ctx_switches=437905181,
interrupts=2222556355L,
soft_interrupts=0,
syscalls=109468308)

Также есть возможность извлечь информацию о диске и состоянии памяти:

In [1]: psutil.disk_usage("c:")Out[1]: sdiskusage(total=127950385152L,
                   used=116934914048L,
                   free=11015471104L,
                   percent=91.4)

In [2]: psutil.virtual_memory()
Out[2]: svmem(total=8488030208L,
              available=3647520768L,
              percent=57.0,
              used=4840509440L,
              free=3647520768L)

Можно даже получить данные о времени автономной работы или узнать текущую температуру процессора:

In [1]: psutil.sensors_battery()
Out[1]: sbattery(percent=77, secsleft=18305, power_plugged=False)

In [2]: psutil.sensors_temperatures() # In Celsius
Out[2]: {'ACPI\\ThermalZone\\THM0_0': 
        [shwtemp(label='', 
         current=49.05000000000001, 
         high=127.05000000000001, 
         critical=127.05000000000001)]}

Получение информации о процессах

Одной из самых классных фишек этой библиотеки является то, что можно получить доступ к процессам и их статистике. Однако есть процессы, которые требуют наличия прав администратора. В противном случае после попытки доступа произойдет сбой с ошибкой "AccessDenied". Давайте протестируем эту функцию.

Сначала создадим экземпляр, предоставляя требуемый идентификатор процесса:

In [1]: p = psutil.Process(9800)

Затем можно получить доступ ко всей информации и статистике процесса:

In [1]: p.exe()
Out[1]: 'C:\\Windows\\System32\\dllhost.exe'

In [2]: p.cpu_percent()
Out[2]: 0.0

In [3]: p.cwd()
Out[3]: 'C:\\WINDOWS\\system32'

Создадим функцию, которая связывает открытые порты соединений с процессами. Для начала нужно перебрать все открытые соединения.

In [1]: ps.net_connections?
Signature: ps.net_connections(kind='inet')
Docstring:
Return system-wide socket connections as a list of
(fd, family, type, laddr, raddr, status, pid) namedtuples.
In case of limited privileges 'fd' and 'pid' may be set to -1
and None respectively.
The *kind* parameter filters for connections that fit the
following criteria:

+------------+----------------------------------------------------+
| Kind Value | Connections using                                  |
+------------+----------------------------------------------------+
| inet       | IPv4 and IPv6                                      |
| inet4      | IPv4                                               |
| inet6      | IPv6                                               |
| tcp        | TCP                                                |
| tcp4       | TCP over IPv4                                      |
| tcp6       | TCP over IPv6                                      |
| udp        | UDP                                                |
| udp4       | UDP over IPv4                                      |
| udp6       | UDP over IPv6                                      |
| unix       | UNIX socket (both UDP and TCP protocols)           |
| all        | the sum of all the possible families and protocols |
+------------+----------------------------------------------------+

Обратим внимание на то, что одним из возвращаемых атрибутов является "pid".

Можно связать это с именем процесса:

In [1]: def link_connection_to_process():
    ...:     for connection in ps.net_connections():
    ...:         try:
    ...:             yield [ps.Process(pid=connection.pid).name(),
    ...:                   connection]
    ...:         except ps.AccessDenied:
    ...:             continue # Keep going if we don't have access

Но не стоит забывать, что если пользователь не обладает правами администратора, он не сможет получить доступ к определенным процессам. Проверим выходные данные. Он вернет много данных, поэтому выведем только первое значение:

In [1]: for proc_to_con in ps.net_connections():
    ...:     print proc_to_con
    ...:     raw_input("...")
    ...:
['ManagementServer.exe', sconn(fd=-1, family=2, type=1,
 laddr=addr(ip='127.0.0.1', port=5905), raddr=addr(ip='127.0.0.1', port=49728),
 status='ESTABLISHED', pid=5224)]
...

Как можно увидеть, первое значение – это имя процесса, второй – данные соединения: IP-адрес, порт, статус и так далее. Данная функция очень полезна для понимания того, какие порты используются конкретными процессами.

Подведение итогов

Psutil – отличная библиотека, предназначенная для управления системой. Она полезна для управления ресурсами как частью потока кода.

Оригинал

Другие материалы по теме:

Комментарии

ВАКАНСИИ

Добавить вакансию
Hotel Search Team Lead (Golang)
по итогам собеседования
Golang-разработчик
Пермь, по итогам собеседования

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ