[PYTHON] Je veux me mettre en colère contre ma mère quand la mémoire est serrée

Même en 2020, je suis toujours en vie en me souciant de la mémoire

Sur un ordinateur portable de 8 Go, VSCode + une version + 20 onglets ouverts dans Chrome ** manquent rapidement de mémoire **. C'est une expérience utilisateur très stricte telle que le décrochage pour chaque système d'exploitation.

Quand j'y pense, depuis que je suis enfant, ma mère m'a souvent réprimandé pour avoir omis des choses. Plutôt qu'un simple manque de capacité de mémoire, cela peut être dû à la nature difficile à guérir de l'enfance.

Je pense qu'il vaudrait mieux se mettre en colère contre ma mère à chaque fois que de corriger mon comportement. Alors, créez une ** application de type mère ** qui vous avertit de fermer les logiciels inutiles sur votre bureau lorsque la mémoire est insuffisante.

Environnement / Langue

--Ubuntu18.04 + environnement gnome3

Obtenez la capacité de mémoire disponible

Pour obtenir la quantité de mémoire disponible sous Linux, vous utilisez généralement la ** commande gratuite **.

$ free
              total        used        free      shared  buff/cache   available
Mem:        8124668     4831144      267628      201468     3025896     2774924
Swap:       2097148         512     2096636

Parmi ceux-ci, la capacité de mémoire réelle disponible est ** la colonne disponible de la ligne Mem **. En gros, cette valeur est (apparemment) calculée par ** [espace libre + capacité qui peut être libérée immédiatement comme le cache utilisé] **.

Le contenu de cette commande gratuite est une version formatée du contenu du pseudo fichier / proc / meminfo. Puisque les fichiers sont plus faciles à gérer pour une utilisation à partir de python, ** récupérez les informations dans / proc / meminfo **.

~$ cat /proc/meminfo 
MemTotal:        8124668 kB
MemFree:          328384 kB
MemAvailable:    2640012 kB
Buffers:          740992 kB
・ ・ ・(Abréviation)

Essayez d'ouvrir le fichier sur le shell interactif. Utilisez la fonction split () pour séparer avec des sauts de ligne et des blancs, et vérifiez l'ordre dans lequel Disponible vient.

>>> f = open('/proc/meminfo')
>>> f.read().split()
['MemTotal:', '8124668', 'kB', 'MemFree:', '318860', 'kB', 'MemAvailable:', '2631456', 'kB', ...]
>>> f.seek(0)
0
>>> f.read().split()[7]
'2625528'

** Une notification doit être émise lorsqu'un élément avec un indice de 7 tombe en dessous de 0,5 Go (500 000 Ko). ** ** (La base de 0,5 Go est en quelque sorte)

À propos, comme vous pouvez le voir dans l'exemple ci-dessus, le contenu est mis à jour ** à chaque fois que vous lisez ** même après l'ouverture.

Ignorer les notifications sur le bureau

Utilisez la commande notifier-envoyer. Le format est le suivant.

$ notify-send -u critical --icon=Nom de l'icône"Titre" "message"

--Spécifiez le type de notification dans -u. Je suis en colère contre le contenu, alors je pense que c'est normal d'être critique.

Faire une icône

J'ai emprunté une icône de mère à M. Irasutoya et je l'ai utilisée (je considérais aussi une mère d'action réelle, mais c'était puissant et j'ai ressenti un ressentiment émotionnel).

shikaruhaha.png

Placez l'icône terminée comme ** shikaruhaha.png ** sous ** / usr / share / pixmap **. (Si vous le placez dans un endroit autre que / usr / share / pixmap, vous devez spécifier le chemin).

$ notify-send -u critical --icon=shikaruhaha "La voix de la mère" "<b>J( 'д')Takashi! Vous ne le laissez pas en désordre!</b>"

Lorsque vous exécutez ce qui précède, cela devient comme ça.

notify.png

code

memwarn.py


#!/usr/bin/python3
import time
import subprocess

with open("/proc/meminfo") as f:
    while(True):
        f.seek(0)
        arr = f.read().split()
        available = int(arr[7])
        if available < 500000:
            subprocess.call(['notify-send', "-u", "critical", "--icon=shikaruhaha", "La voix de la mère", "<b>J( 'д')Takashi! Vous ne le laissez pas en désordre!</b>"])
        time.sleep(2)

Déployer

Démarrez après vous être connecté à l'environnement X. Placez les fichiers suivants sous / etc / xdg / autostart /. Une fois connecté, il démarrera automatiquement.

/etc/xdg/autostart/memwarn.desktop


[Desktop Entry]
Name=MemoryMother
Type=Application
Exec=/usr/libexec/memwarn.py
OnlyShowIn=GNOME;
NoDisplay=true

C'est tout

Résumé

référence

Recommended Posts

Je veux me mettre en colère contre ma mère quand la mémoire est serrée
Je veux commencer avec le noyau Linux, quelle est la structure de la tête de liste?
Je veux faire ○○ avec les Pandas
Je veux déboguer avec Python
Un mémorandum lors de l'acquisition automatique avec du sélénium
J'obtiens une erreur en essayant d'installer maec 4.0.1.0 avec pip
Je veux vérifier la position de mon visage avec OpenCV!
Je veux détecter des objets avec OpenCV
J'ai essayé de commencer avec Hy
Je veux écrire un blog avec Jupyter Notebook
Je veux installer Python avec PythonAnywhere
Je veux analyser les journaux avec Python
Je veux jouer avec aws avec python
Lorsque vous souhaitez l'utiliser tel quel lorsque vous l'utilisez avec lambda memo
Je veux exprimer mes sentiments avec les paroles de Mr. Children
J'obtiens un UnicodeDecodeError en essayant de me connecter à oracle avec python sqlalchemy
Je souhaite résoudre le problème de fuite de mémoire lors de la sortie d'un grand nombre d'images avec Matplotlib
Je veux obtenir le chemin du répertoire où le fichier en cours d'exécution est stocké.
Je veux pouvoir penser à la récurrence
Je veux utiliser MATLAB feval avec python
Je veux moquer datetime.datetime.now () même avec pytest!
Je souhaite afficher plusieurs images avec matplotlib.
Je veux frapper 100 sciences des données avec Colaboratory
Je veux faire un jeu avec Python
Je veux être OREMO avec setParam!
J'ai essayé d'obtenir des données CloudWatch avec Python
[OpenCV] Lorsque vous voulez vérifier s'il est lu correctement avec imread
J'obtiens une UnicodeDecodeError lors de l'exécution avec mod_wsgi
Je veux faire des crises de ma tête
Je souhaite utiliser le répertoire temporaire avec Python2
5 raisons pour lesquelles le traitement est utile pour ceux qui veulent se lancer avec Python
Je veux obtenir les données de League of Legends ③
[python] [vscode] Lorsque vous vous fâchez avec space-tab-mixed
Je veux obtenir les données de League of Legends ②
Je ne veux pas utiliser -inf avec np.log
#Unresolved Je veux compiler gobject-introspection avec Python3
Je souhaite utiliser ip vrf avec SONiC
Je veux résoudre APG4b avec Python (chapitre 2)
Je veux recommencer avec Migrate de Django
Je veux obtenir les données de League of Legends ①
Je veux écrire dans un fichier avec Python
[Python] Je souhaite utiliser uniquement l'index lors de la mise en boucle d'une liste avec une instruction for
Quand j'essaye d'installer mysqlclient avec Django, j'obtiens l'erreur: la commande 'gcc' a échoué avec l'état de sortie 1.
Ce que j'ai fait quand j'étais en colère de le mettre avec l'option enable-shared
Je souhaite envoyer un message d'erreur en japonais avec le formulaire de changement de mot de passe django
Lorsque la variable que vous souhaitez utiliser comme exposant dans matplotlib comporte deux caractères ou plus
Je veux convertir une image en WebP avec sucette
Je souhaite détecter une connexion non autorisée à Facebook avec Jubatus (1)
Je veux faire la transition avec un bouton sur le ballon
Je veux gérer l'optimisation avec python et cplex
Je veux escalader une montagne avec l'apprentissage par renforcement
J'ai essayé de démarrer avec le script python de blender_Part 01
Je veux réfuter "Ce n'est pas cool en Ruby"
Paramètres lorsque vous souhaitez exécuter python-mecab avec travis
J'ai essayé de démarrer avec le script python de blender_Partie 02
Lorsque vous souhaitez filtrer avec le framework Django REST
Je veux hériter de l'arrière avec la classe de données python