Какой предпочитаемый способ получения текущего состояния системы (текущий процессор, оперативная память, свободное место на диске и т. Д.) В Python? Бонусные баллы для * nix и Windows платформ.
Кажется, есть несколько возможных способов извлечь это из моего поиска:
Использование библиотеки, такой как PSI (которая в настоящее время, кажется, не активно развивается и не поддерживается на нескольких платформах) или что-то вроде pystatgrab (опять же, с 2007 года, похоже, нет активности и нет поддержки Windows)
Использование специфического для платформы кода, например использование
os.popen("ps")
или аналогичный для систем * nix иMEMORYSTATUS
вctypes.windll.kernel32
(см. Этот рецепт на ActiveState ) для платформы Windows. Можно поместить класс Python вместе со всеми этими фрагментами кода.
Не то чтобы эти методы плохие, но уже есть хорошо поддерживаемый, многоплатформенный способ сделать то же самое?
Ответы:
Библиотека psutil предоставляет вам информацию о процессоре, оперативной памяти и т. Д. На различных платформах:
Некоторые примеры:
Вот другая документация, которая предоставляет больше понятий и понятий интереса:
источник
$ pip install psutil
;>>> import psutil; psutil.cpu_percent()
и>>> psutil.virtual_memory()
который возвращает хороший объект VMEM:vmem(total=8589934592L, available=4073336832L, percent=52.6, used=5022085120L, free=3560255488L, active=2817949696L, inactive=513081344L, wired=1691054080L)
Используйте библиотеку psutil . На Ubuntu 18.04 pip установлен 5.5.0 (последняя версия) по состоянию на 1-30-2019. Старые версии могут вести себя несколько иначе. Вы можете проверить свою версию psutil, выполнив это в Python:
Чтобы получить статистику по памяти и процессору:
У
virtual_memory
(кортежа) будет процент памяти, используемой в масштабе всей системы. Это казалось мне завышенным на несколько процентов в Ubuntu 18.04.Вы также можете получить память, используемую текущим экземпляром Python:
который дает текущее использование памяти вашего скрипта Python.
На странице pypi для psutil есть еще несколько подробных примеров .
источник
Только для Linux: одна строка для использования ОЗУ с зависимостью только от stdlib:
редактировать: указанное решение ОС зависимости
источник
os.popen('free -th').readlines()[-1].split()[1:]
. Обратите внимание, что эта строка возвращает список строк.python:3.8-slim-buster
Не имеетfree
У меня ниже коды, без внешних библиотек работали. Я тестировал на Python 2.7.9
Использование процессора
И использование плунжера, всего, б / у и бесплатно
источник
grep
иawk
о них лучше позаботиться, обрабатывая строки в Python?Вот кое-что, что я собрал некоторое время назад, это только окна, но может помочь вам получить часть того, что вам нужно сделать.
Получено из: "для sys доступно mem" http://msdn2.microsoft.com/en-us/library/aa455130.aspx
«Информация об отдельных процессах и примеры сценариев Python» http://www.microsoft.com/technet/scriptcenter/scripts/default.mspx?mfr=true
ПРИМЕЧАНИЕ. Интерфейс / процесс WMI также доступен для выполнения аналогичных задач. Я не использую его здесь, поскольку текущий метод покрывает мои потребности, но если когда-нибудь потребуется его расширить или улучшить, то, возможно, захочется исследовать инструменты WMI как доступную. ,
WMI для Python:
http://tgolden.sc.sabren.com/python/wmi.html
Код:
http://monkut.webfactional.com/blog/archive/2009/1/21/windows-process-memory-logging-python
источник
from x import *
заявлений! Они загромождают пространство основных имен и перезаписывают другие функции и переменные.Мы решили использовать обычный источник информации для этого, потому что мы могли найти мгновенные колебания в свободной памяти и чувствовали, что запрос источника данных meminfo был полезен. Это также помогло нам получить еще несколько связанных параметров, которые были предварительно проанализированы.
Код
Вывод для справки (мы удалили все новые строки для дальнейшего анализа)
источник
Я чувствую, что эти ответы были написаны для Python 2, и в любом случае никто не упомянул стандартный
resource
пакет, доступный для Python 3. Он предоставляет команды для получения ограничений ресурсов для данного процесса (по умолчанию вызывающий процесс Python). Это не то же самое, что текущее использование ресурсов системой в целом, но это может решить некоторые из тех же проблем, таких как, например: «Я хочу убедиться, что я использую только X много оперативной памяти с этим сценарием».источник
«... текущее состояние системы (текущий процессор, оперативная память, свободное место на диске и т. д.)» И «* nix и платформы Windows» могут оказаться трудной комбинацией.
Операционные системы принципиально отличаются тем, как они управляют этими ресурсами. Действительно, они различаются по основным понятиям, таким как определение того, что считается системой, а что - временем приложения.
"Свободное место на диске"? Что считается "дисковым пространством"? Все разделы всех устройств? А как насчет внешних разделов в мультизагрузочной среде?
Я не думаю, что существует достаточно четкий консенсус между Windows и * nix, который делает это возможным. Действительно, между различными операционными системами, называемыми Windows, может и не быть единого мнения. Есть ли один Windows API, который работает как для XP, так и для Vista?
источник
df -h
отвечает на вопрос о дисковом пространстве как в Windows, так и в * nix.Этот скрипт для использования процессора:
источник
Для деталей процессора используйте библиотеку psutil
Для частоты RAM (в МГц) используйте встроенную в Linux библиотеку dmidecode и немного манипулируйте выводом;). эта команда требует прав суперпользователя, поэтому укажите и ваш пароль. просто скопируйте следующий комментарий, заменив mypass своим паролем
[i for i in os.popen("echo mypass | sudo -S dmidecode -t memory | grep 'Clock Speed' | cut -d ':' -f2").read().split(' ') if i.isdigit()]
источник
Чтобы получить построчный анализ памяти и времени вашей программы, я предлагаю использовать
memory_profiler
иline_profiler
.Монтаж:
Общая часть заключается в том, что вы указываете, какую функцию вы хотите проанализировать, используя соответствующие декораторы.
Пример: в моем файле Python есть несколько функций,
main.py
которые я хочу проанализировать. Одним из них являетсяlinearRegressionfit()
. Мне нужно использовать декоратор,@profile
который помогает мне профилировать код с точки зрения времени и памяти.Внесите следующие изменения в определение функции
Для профилирования времени ,
Бегать:
Вывод
Для профилирования памяти ,
Бегать:
Вывод
Кроме того, результаты профилирования памяти также могут быть нанесены с
matplotlib
использованиемПримечание: проверено на
line_profiler
версия == 3.0.2memory_profiler
версия == 0.57.0psutil
версия == 5.7.0источник
Вы можете использовать psutil или psmem с примером кода подпроцесса
Ссылка http://techarena51.com/index.php/how-to-install-python-3-and-flask-on-linux/
https://github.com/Leo-g/python-flask-cmd
источник
Основываясь на коде использования процессора @Hrabal, я использую это:
источник
Я не верю, что есть хорошо поддерживаемая многоплатформенная библиотека. Помните, что сам Python написан на C, поэтому любая библиотека просто примет умное решение о том, какой фрагмент кода для конкретной ОС запускать, как вы предложили выше.
источник