¿Cuál es su forma preferida de obtener el estado actual del sistema (CPU actual, RAM, espacio libre en disco, etc.) en Python? Puntos de bonificación para * nix y plataformas Windows.
Parece que hay algunas formas posibles de extraer eso de mi búsqueda:
Usar una biblioteca como PSI (que actualmente parece no estar desarrollada activamente y no es compatible con múltiples plataformas) o algo así como pystatgrab (de nuevo, no parece haber actividad desde 2007 y no es compatible con Windows).
Usar código específico de la plataforma, como el uso de
os.popen("ps")
o similar para los sistemas * nix yMEMORYSTATUS
enctypes.windll.kernel32
(consulte esta receta en ActiveState ) para la plataforma Windows. Uno podría poner una clase de Python junto con todos esos fragmentos de código.
No es que esos métodos sean malos, pero ¿existe ya una forma multiplataforma bien respaldada de hacer lo mismo?
Respuestas:
La biblioteca psutil le brinda información sobre CPU, RAM, etc., en una variedad de plataformas:
Algunos ejemplos:
Aquí hay otra documentación que proporciona más conceptos y conceptos de interés:
fuente
$ pip install psutil
;>>> import psutil; psutil.cpu_percent()
y>>> psutil.virtual_memory()
que devuelve un objeto vmem agradable:vmem(total=8589934592L, available=4073336832L, percent=52.6, used=5022085120L, free=3560255488L, active=2817949696L, inactive=513081344L, wired=1691054080L)
Utiliza la biblioteca psutil . En Ubuntu 18.04, pip instaló 5.5.0 (última versión) a partir del 1-30-2019. Las versiones anteriores pueden comportarse de manera algo diferente. Puede verificar su versión de psutil haciendo esto en Python:
Para obtener algunas estadísticas de memoria y CPU:
La
virtual_memory
(tupla) tendrá el porcentaje de memoria utilizada en todo el sistema. Esto parecía estar sobreestimado por un pequeño porcentaje para mí en Ubuntu 18.04.También puede obtener la memoria utilizada por la instancia actual de Python:
que proporciona el uso de memoria actual de su script Python.
Hay algunos ejemplos más detallados en la página de pypi para psutil .
fuente
Solo para Linux: One-liner para el uso de RAM con solo dependencia stdlib:
editar: dependencia del sistema operativo de solución especificada
fuente
os.popen('free -th').readlines()[-1].split()[1:]
. Tenga en cuenta que esta línea devuelve una lista de cadenas.python:3.8-slim-buster
no tienefree
Los siguientes códigos, sin bibliotecas externas, me funcionaron. Probé en Python 2.7.9
Uso de CPU
Y uso de ram, total, usado y gratuito
fuente
grep
yawk
sería tomado por un mejor cuidado de procesamiento de cadenas en Python?Esto es algo que reuní hace un tiempo, solo es Windows, pero puede ayudarlo a obtener parte de lo que necesita hacer.
Derivado de: "for sys available mem" http://msdn2.microsoft.com/en-us/library/aa455130.aspx
"información de proceso individual y ejemplos de script de Python" http://www.microsoft.com/technet/scriptcenter/scripts/default.mspx?mfr=true
NOTA: la interfaz / proceso WMI también está disponible para realizar tareas similares. No lo estoy usando aquí porque el método actual cubre mis necesidades, pero si algún día es necesario extenderlo o mejorarlo, puede investigar las herramientas WMI disponibles. .
WMI para python:
http://tgolden.sc.sabren.com/python/wmi.html
El código:
http://monkut.webfactional.com/blog/archive/2009/1/21/windows-process-memory-logging-python
fuente
from x import *
declaraciones! Abarrotan el espacio de nombres principal y sobrescriben otras funciones y variables.Elegimos usar la fuente de información habitual para esto porque pudimos encontrar fluctuaciones instantáneas en la memoria libre y sentimos que era útil consultar la fuente de datos de meminfo . Esto también nos ayudó a obtener algunos parámetros más relacionados que se analizaron previamente.
Código
Salida para referencia (eliminamos todas las nuevas líneas para su posterior análisis)
fuente
Siento que estas respuestas fueron escritas para Python 2 y, en cualquier caso, nadie mencionó el
resource
paquete estándar que está disponible para Python 3. Proporciona comandos para obtener los límites de recursos de un proceso dado (el proceso de Python que llama de forma predeterminada). Esto no es lo mismo que obtener el uso actual de los recursos por parte del sistema en su conjunto, pero podría resolver algunos de los mismos problemas como, por ejemplo, "Quiero asegurarme de que solo use X mucha RAM con este script".fuente
"... estado actual del sistema (CPU actual, RAM, espacio libre en disco, etc.)" Y "* nix y plataformas Windows" pueden ser una combinación difícil de lograr.
Los sistemas operativos son fundamentalmente diferentes en la forma en que administran estos recursos. De hecho, difieren en conceptos básicos como definir qué cuenta como sistema y qué cuenta como tiempo de aplicación.
"Espacio libre en disco"? ¿Qué cuenta como "espacio en disco"? Todas las particiones de todos los dispositivos? ¿Qué pasa con las particiones extranjeras en un entorno de arranque múltiple?
No creo que haya un consenso suficientemente claro entre Windows y * nix que lo haga posible. De hecho, puede que ni siquiera haya consenso entre los diversos sistemas operativos llamados Windows. ¿Existe una única API de Windows que funcione tanto para XP como para Vista?
fuente
df -h
responde la pregunta "espacio en disco" tanto en Windows como en * nix.Este script para uso de CPU:
fuente
Para detalles de la CPU, use la biblioteca psutil
Para la frecuencia de RAM (en MHz), utilice el dmidecode de la biblioteca Linux incorporado y manipule un poco la salida;). este comando necesita permiso de root, por lo tanto, proporcione su contraseña también. simplemente copie la siguiente recomendación reemplazando mypass con su contraseña
[i for i in os.popen("echo mypass | sudo -S dmidecode -t memory | grep 'Clock Speed' | cut -d ':' -f2").read().split(' ') if i.isdigit()]
fuente
Para obtener un análisis de memoria y tiempo línea por línea de su programa, sugiero usar
memory_profiler
yline_profiler
.Instalación:
La parte común es que usted especifica qué función desea analizar utilizando los decoradores respectivos.
Ejemplo: Tengo varias funciones en mi archivo Python
main.py
que quiero analizar. Uno de ellos eslinearRegressionfit()
. Necesito usar el decorador@profile
que me ayuda a perfilar el código con respecto a ambos: Tiempo y Memoria.Realice los siguientes cambios en la definición de la función
Para perfiles de tiempo ,
Correr:
Salida
Para perfiles de memoria ,
Correr:
Salida
Además, los resultados del generador de perfiles de memoria también se pueden trazar
matplotlib
usandoNota: Probado en
line_profiler
versión == 3.0.2memory_profiler
versión == 0.57.0psutil
versión == 5.7.0fuente
Puede usar psutil o psmem con código de ejemplo de subproceso
Referencia http://techarena51.com/index.php/how-to-install-python-3-and-flask-on-linux/
https://github.com/Leo-g/python-flask-cmd
fuente
Basado en el código de uso de la CPU de @Hrabal, esto es lo que uso:
fuente
No creo que haya una biblioteca multiplataforma bien soportada disponible. Recuerde que Python está escrito en C, por lo que cualquier biblioteca simplemente tomará una decisión inteligente sobre qué fragmento de código específico del sistema operativo ejecutar, como sugirió anteriormente.
fuente