Вопрос-Ответ

How to get current CPU and RAM usage in Python?

Как получить текущее использование процессора и оперативной памяти в Python?

Как я могу получить текущее состояние системы (текущий процессор, оперативная память, свободное место на диске и т.д.) В Python? В идеале это работало бы как для платформ Unix, так и для Windows.

Кажется, есть несколько возможных способов извлечь это из моего поиска:


  1. Используя библиотеку, такую как PSI (которая в настоящее время, похоже, не разрабатывается активно и не поддерживается на нескольких платформах) или что-то вроде pystatgrab (похоже, опять никакой активности с 2007 года и нет поддержки Windows).



  2. Использование кода, зависящего от платформы, такого как использование a os.popen("ps") или аналогичного для систем * nix и MEMORYSTATUS в ctypes.windll.kernel32 (см. Этот рецепт на ActiveState) для платформы Windows. Можно было бы объединить класс Python со всеми этими фрагментами кода.



Дело не в том, что эти методы плохие, но есть ли уже хорошо поддерживаемый мультиплатформенный способ сделать то же самое?

Переведено автоматически
Ответ 1

Библиотека psutil предоставляет вам информацию о процессоре, оперативной памяти и т.д. На различных платформах:


psutil - это модуль, предоставляющий интерфейс для получения информации о запущенных процессах и загрузке системы (ЦП, памяти) переносимым способом с использованием Python, реализующий множество функциональных возможностей, предлагаемых такими инструментами, как ps, top и диспетчер задач Windows.


В настоящее время он поддерживает Linux, Windows, OSX, Sun Solaris, FreeBSD, OpenBSD и NetBSD, как 32-разрядные, так и 64-разрядные архитектуры, с версиями Python от 2.6 до 3.5 (пользователи Python 2.4 и 2.5 могут использовать версию 2.1.3).



Несколько примеров:

#!/usr/bin/env python
import psutil
# gives a single float value
psutil.cpu_percent()
# gives an object with many fields
psutil.virtual_memory()
# you can convert that object to a dictionary
dict(psutil.virtual_memory()._asdict())
# you can have the percentage of used RAM
psutil.virtual_memory().percent
79.2
# you can calculate percentage of available memory
psutil.virtual_memory().available * 100 / psutil.virtual_memory().total
20.8

Вот другая документация, которая предоставляет больше концепций и интересных концепций:

Ответ 2

Используйте библиотеку psutil. В Ubuntu 18.04 pip установил 5.5.0 (последнюю версию) по состоянию на 1-30-2019. Более старые версии могут вести себя несколько иначе. Вы можете проверить свою версию psutil, выполнив это в Python:

from __future__ import print_function  # for Python2
import psutil
print(psutil.__versi‌​on__)

Чтобы получить некоторую статистику памяти и процессора:

from __future__ import print_function
import psutil
print(psutil.cpu_percent())
print(psutil.virtual_memory()) # physical memory usage
print('memory % used:', psutil.virtual_memory()[2])

В virtual_memory (кортеже) будет указан процент используемой памяти в масштабах всей системы. Мне показалось, что в Ubuntu 18.04 этот показатель завышен на несколько процентов.

Вы также можете получить память, используемую текущим экземпляром Python:

import os
import psutil
pid = os.getpid()
python_process = psutil.Process(pid)
memoryUse = python_process.memory_info()[0]/2.**30 # memory use in GB...I think
print('memory use:', memoryUse)

который показывает текущее использование памяти вашим скриптом Python.

На странице pypi для psutil есть еще несколько подробных примеров.

Ответ 3

Можно получить мониторинг ЦП и ОЗУ в режиме реального времени, комбинируя tqdm и psutil. Это может быть удобно при выполнении тяжелых вычислений / обработки.

индикаторы выполнения использования процессора и оперативной памяти cli

Это также работает в Jupyter без каких-либо изменений кода:

Индикаторы выполнения использования процессора и оперативной памяти Jupyter

from tqdm import tqdm
from time import sleep
import psutil

with tqdm(total=100, desc='cpu%', position=1) as cpubar, tqdm(total=100, desc='ram%', position=0) as rambar:
while True:
rambar.n=psutil.virtual_memory().percent
cpubar.n=psutil.cpu_percent()
rambar.refresh()
cpubar.refresh()
sleep(0.5)

Удобно поместить эти индикаторы выполнения в отдельный процесс, используя многопроцессорную библиотеку.

Этот фрагмент кода также доступен в качестве сути.

Ответ 4

Только для Linux: однострочный вариант использования оперативной памяти только с зависимостью stdlib:

import os
tot_m, used_m, free_m = map(int, os.popen('free -t -m').readlines()[-1].split()[1:])
python