Bonjour,
Pour faire suite à quelques autres discussions sur le sujet, voici comment corriger le problème de consommation mémoire anormale de votre démon codé en python si celui-ci utilise les class proposées avec le #plugin-template.
TL;DR;
Copiez la nouvelle version de jeedom.py
du plugin-template: plugin-template/resources/demond/jeedom/jeedom.py at master · jeedom/plugin-template · GitHub
C’est confirmé que cela permet de stopper l’augmentation constante de consommation mémoire sur deux plugins (plugin-broadlink & plugin-rfplayer2) sous debian 11 et un 3ème (plugin-openenocean) est en attente de confirmation des utilisateurs.
Edit: confirmation pour plugin-openenocean : Conso mémoire sous deb11 - #4 par M1R4G3
Plus de détails
Le problème était causé par le fait qu’un nouveau thread était créé pour chaque « cycle » d’envoi d’information au code php du plugin pour la méthode « asynchrone »; ces nouveaux threads ayant chacun comme « parent » le thread précédent, il n’était pas libéré complètement et s’empilait jusqu’à ce que finalement le démon soit redémarré.
Ce qui fait que pour des démons avec un cycle très court, le problème se créait très rapidement alors que pour d’autres avec un cycle plus long, cela prenait plus de temps;
Si le cycle était fixé à « 0 », le problème ne se posait pas car ce mécanisme asynchrone se désactivait de lui-même.
La nouvelle version ne créé plus qu’un seul et unique thread qui est une boucle sans fin;
C’est tout, rien de sorcier lorsque l’on sait, il fallait juste trouver l’origine
Pour ces class, il n’existe malheureusement pas de package pouvant être distribué facilement via une mise à jour de dépendance avec une nouvelle version; vous devez donc mettre à jour « à la main » vos plugins.
Tout ceci me fait dire que la programmation multi-thread est bien plus compliquée, sensible et dangereuse que la programmation asyncio
Si vous souhaitez une alternative, je rappelle l’existence de ma lib: https://pypi.org/project/jeedomdaemon/
Elle n’est pas garantie sans bug mais dans le cas ou un fix est nécessaire, une relance des dépendances suffira à mettre à jour