Je viens de trouver !

Une commande Django pour manage.py qui effectue une mise à jour complète d’une base de donnée, avait une occupation mémoire gigantesque. Après un debug intensif et de nombreux tests, impossible de comprendre ce qui clochait dans mon code.

C’est ce post qui m’a mis sur la voie : en mode DEBUG= True, Django mémorise l’ensemble des requêtes sur la base de donnée pendant la requête HTTP en cours… Mais il n’y a pas de requête HTTP pendant l’exécution de manage.py, donc tous mes appels à la base sont mémorisés par Django et encombrent la mémoire !

Il y a donc deux solutions à ce problème :

  1. positionner DEBUG= FALSE
  2. faire appel à db.reset_queries() régulièrement pour vider cette liste de requêtes. ( from django import db )