Работа мечты в один клик 💼

💭Мечтаешь работать в Сбере, но не хочешь проходить десять кругов HR-собеседований? Теперь это проще, чем когда-либо!
💡AI-интервью за 15 минут – и ты уже на шаг ближе к своей новой работе.
Как получить оффер?
📌 Зарегистрируйся
📌 Пройди AI-интервью
📌 Получи обратную связь сразу же!
HR больше не тянут время – рекрутеры свяжутся с тобой в течение двух дней! 🚀
Реклама. ПАО СБЕРБАНК, ИНН 7707083893. Erid 2VtzquscAwp
Библиотека 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 – отличная библиотека, предназначенная для управления системой. Она полезна для управления ресурсами как частью потока кода.
Комментарии