Quelle est votre façon préférée d'obtenir l'état actuel du système (CPU actuel, RAM, espace disque libre, etc.) en Python? Points bonus pour les plates-formes * nix et Windows.
Il semble y avoir quelques façons possibles d'extraire cela de ma recherche:
Utiliser une bibliothèque telle que PSI (qui ne semble pas actuellement activement développée et non prise en charge sur plusieurs plates-formes) ou quelque chose comme pystatgrab (encore une fois aucune activité depuis 2007, il semble et pas de support pour Windows).
Utilisation de code spécifique à la plate-forme tel que l'utilisation d'un
os.popen("ps")
ou similaire pour les systèmes * nix etMEMORYSTATUS
dansctypes.windll.kernel32
(voir cette recette sur ActiveState ) pour la plate-forme Windows. On pourrait mettre une classe Python avec tous ces extraits de code.
Ce n'est pas que ces méthodes sont mauvaises, mais existe-t-il déjà un moyen multi-plateforme bien supporté de faire la même chose?
Réponses:
La bibliothèque psutil vous donne des informations sur le CPU, la RAM, etc., sur une variété de plateformes:
Quelques exemples:
Voici une autre documentation qui fournit plus de concepts et de concepts d'intérêt:
la source
$ pip install psutil
;>>> import psutil; psutil.cpu_percent()
et>>> psutil.virtual_memory()
qui renvoie un bel objet vmem:vmem(total=8589934592L, available=4073336832L, percent=52.6, used=5022085120L, free=3560255488L, active=2817949696L, inactive=513081344L, wired=1691054080L)
Utilisez la bibliothèque psutil . Sur Ubuntu 18.04, pip a installé 5.5.0 (dernière version) à partir du 1-30-2019. Les versions plus anciennes peuvent se comporter quelque peu différemment. Vous pouvez vérifier votre version de psutil en faisant cela en Python:
Pour obtenir des statistiques sur la mémoire et le processeur:
Le
virtual_memory
(tuple) aura le pourcentage de mémoire utilisé à l'échelle du système. Cela semblait être surestimé de quelques pour cent pour moi sur Ubuntu 18.04.Vous pouvez également obtenir la mémoire utilisée par l'instance Python actuelle:
qui donne l'utilisation actuelle de la mémoire de votre script Python.
Il y a quelques exemples plus approfondis sur la page pypi pour psutil .
la source
Uniquement pour Linux: une ligne pour l'utilisation de la RAM avec seulement la dépendance stdlib:
modification: dépendance du système d'exploitation de la solution spécifiée
la source
os.popen('free -th').readlines()[-1].split()[1:]
. Notez que cette ligne renvoie une liste de chaînes.python:3.8-slim-buster
n'a pasfree
Les codes ci-dessous, sans bibliothèques externes, ont fonctionné pour moi. J'ai testé sur Python 2.7.9
L'utilisation du processeur
Et l'utilisation de Ram, totale, utilisée et gratuite
la source
grep
etawk
serait mieux pris en charge par le traitement des chaînes en Python?Voici quelque chose que j'ai mis en place il y a quelque temps, ce n'est que des fenêtres, mais cela peut vous aider à obtenir une partie de ce que vous devez faire.
Dérivé de: "for sys available mem" http://msdn2.microsoft.com/en-us/library/aa455130.aspx
"informations sur les processus individuels et exemples de scripts python" http://www.microsoft.com/technet/scriptcenter/scripts/default.mspx?mfr=true
REMARQUE: l'interface / le processus WMI est également disponible pour effectuer des tâches similaires, je ne l'utilise pas ici car la méthode actuelle couvre mes besoins, mais si un jour il est nécessaire de l'étendre ou de l'améliorer, vous voudrez peut-être étudier les outils WMI disponibles .
WMI pour python:
http://tgolden.sc.sabren.com/python/wmi.html
Le code:
http://monkut.webfactional.com/blog/archive/2009/1/21/windows-process-memory-logging-python
la source
from x import *
déclarations! Ils encombrent l'espace de noms principal et écrasent les autres fonctions et variables.Nous avons choisi d'utiliser la source d'informations habituelle pour cela, car nous pouvions trouver des fluctuations instantanées dans la mémoire libre et nous sentions interroger le meminfo source de données était utile. Cela nous a également permis d'obtenir quelques paramètres supplémentaires qui ont été pré-analysés.
Code
Sortie pour référence (nous avons supprimé toutes les nouvelles lignes pour une analyse plus approfondie)
la source
J'ai l'impression que ces réponses ont été écrites pour Python 2, et en tout cas personne n'a fait mention du
resource
package standard disponible pour Python 3. Il fournit des commandes pour obtenir les limites de ressources d'un processus donné (le processus Python appelant par défaut). Ce n'est pas la même chose que d'obtenir l' utilisation actuelle des ressources par le système dans son ensemble, mais cela pourrait résoudre certains des mêmes problèmes comme par exemple "Je veux m'assurer que j'utilise seulement beaucoup de RAM avec ce script."la source
"... état actuel du système (CPU actuel, RAM, espace disque libre, etc.)" Et "* nix et plates-formes Windows" peuvent être une combinaison difficile à réaliser.
Les systèmes d'exploitation sont fondamentalement différents dans la façon dont ils gèrent ces ressources. En effet, ils diffèrent dans les concepts de base comme définir ce qui compte comme système et ce qui compte comme temps d'application.
"Espace disque libre"? Qu'est-ce qui compte comme "espace disque"? Toutes les partitions de tous les appareils? Qu'en est-il des partitions étrangères dans un environnement multi-boot?
Je ne pense pas qu'il existe un consensus suffisamment clair entre Windows et * nix qui rend cela possible. En effet, il peut même ne pas y avoir de consensus entre les différents systèmes d'exploitation appelés Windows. Existe-t-il une seule API Windows qui fonctionne à la fois pour XP et Vista?
la source
df -h
répond à la question "espace disque" sous Windows et * nix.Ce script pour l'utilisation du processeur:
la source
Pour les détails du processeur, utilisez la bibliothèque psutil
Pour la fréquence RAM (en MHz), utilisez la bibliothèque Linux intégrée dmidecode et manipulez un peu la sortie;). cette commande nécessite une autorisation root, donc fournissez également votre mot de passe. il suffit de copier la recommandation suivante en remplaçant mypass par votre mot de passe
[i for i in os.popen("echo mypass | sudo -S dmidecode -t memory | grep 'Clock Speed' | cut -d ':' -f2").read().split(' ') if i.isdigit()]
la source
Pour obtenir une mémoire ligne par ligne et une analyse temporelle de votre programme, je vous suggère d'utiliser
memory_profiler
etline_profiler
.Installation:
La partie commune est que vous spécifiez la fonction que vous souhaitez analyser en utilisant les décorateurs respectifs.
Exemple: J'ai plusieurs fonctions dans mon fichier Python
main.py
que je veux analyser. L'un d'eux l'estlinearRegressionfit()
. J'ai besoin d'utiliser le décorateur@profile
qui m'aide à profiler le code en ce qui concerne à la fois: Time & Memory.Apportez les modifications suivantes à la définition de la fonction
Pour le profilage temporel ,
Courir:
Production
Pour le profilage de la mémoire ,
Courir:
Production
En outre, les résultats du profileur de mémoire peuvent également être tracés à l'
matplotlib
aide deRemarque: testé sur
line_profiler
version == 3.0.2memory_profiler
version == 0.57.0psutil
version == 5.7.0la source
Vous pouvez utiliser psutil ou psmem avec un exemple de code de sous-processus
Référence http://techarena51.com/index.php/how-to-install-python-3-and-flask-on-linux/
https://github.com/Leo-g/python-flask-cmd
la source
Basé sur le code d'utilisation du processeur par @Hrabal, voici ce que j'utilise:
la source
Je ne pense pas qu'il existe une bibliothèque multi-plateforme bien prise en charge. N'oubliez pas que Python lui-même est écrit en C, donc n'importe quelle bibliothèque va simplement prendre une décision intelligente sur l'extrait de code spécifique au système d'exploitation à exécuter, comme vous l'avez suggéré ci-dessus.
la source