j'ai un programme de serveur en Micropython sur ESP 32 qui utilise quelques fichiers de librairies js (on parle de fichiers de quelques kb) : j'ai le résultat attendu. Par contre, j'ai un problème par moment de mémoire type "Memory Allocation failed for xxxxx bytes", notamment à la répétition du chargement du fichier ou si j'utilise une plus grosse librairie.
Je soupçonne fortement le fait que les fichiers ouverts viennent saturer la mémoire RAM. Une première option est évidemment d'utiliser que de petites librairies, ce qui est le cas en l'occurrence. Ou de mettre les libs à servir sur le raspberry pi par exemple qui fait aussi le broker MQTT du réseau local, etc. Mais j'aimerai ici me concentrer sur les possibilités d'optimiser en micropython le chargement du fichier pour ne pas saturer la RAM.
J'ai mis en entête ce qui est conseillé sur le site Micropython : https://docs.micropython.org/en/latest/ ... eption_buf
Code: Select all
import micropython
micropython.alloc_emergency_exception_buf()
Je me demande si une bonne solution se serait de pouvoir lire le fichier sans le charger totalement en mémoire, ce qui est le cas par défaut avec un f.read().
J'ai lu ici : https://www.quora.com/How-do-I-load-lar ... -in-Python
qu'on peut passer par l'iterateur plutôt que le fichier entier qui va lire ligne par ligne en faisant :
Code: Select all
f = open("file")
for line in f:
...
Je suis preneur de suggestions autour de ce sujet de la saturation de la RAM par ouverture de "gros" fichiers sur carte micropython.