J'ai un projet GAE écrit en Python. J'ai fait un cron pour exécuter une opération par lots. Mais il a atteint une limite de mémoire privée de l'instance F1, qui est de 124 Mo après quelques itérations. Quelqu'un pourrait-il m'aider à écrire ce code de manière plus efficace, avec un peu moins de 124 Mo. len (personnes) doit être inférieur à 500.Une fuite de mémoire s'est produite dans le projet Google App Engine Python. Un moyen efficace d'écrire mon opération?
def cron():
q = Account.all().filter('role =', 1)
people = [e for e in q]
for p in people:
s = Schedule.available(p)
m = ScheduleMapper(s).as_dict()
memcache.set('key_for_%s' % p.key(), m)
Ceci est un serveur de développement et je ne souhaite pas mettre à niveau ma classe d'instance. De plus, je veux éviter d'utiliser des bibliothèques tierces, telles que numpy et pandas.
J'ai ajouté un garbage collection dans la dernière ligne de for boucle. Mais cela ne semble pas fonctionner.
del s
m.clear()
import gc
gc.collect()
Vous n'avez pas mentionné le nombre d'entités que vous récupérez. En outre, je déplacerais la boucle vers une fonction et la gc vers l'extérieur. Quand vous parlez d'itérations, voulez-vous dire invocations du gestionnaire de cron ou de la boucle externe ou interne? –
Merci pour le commentaire! Le nombre d'entités devrait être inférieur à 500. Quant aux itérations, je parlais de boucle interne. – steve
combien sur la boucle interne. Sans voir vos modèles, je soupçonne que vous détenez des références quelque part. –