J'ai ce code pour obtenir l'appelant du nom de fichier de ma fonction, le numéro de ligne, et la fonction. Il semble y avoir des fuites de cadres et je ne comprends pas pourquoi. Est-ce que ça me rejette et ma fuite doit être ailleurs?Python fuite de mémoire, fuites de cadres
rv = "(unknown file)", 0, "(unknown function)"
for f in inspect.stack()[1:]:
if __file__ in f:
continue
else:
rv = f[1:4]
break
return rv
Je ne sauvegarde nulle part une référence au cadre. Mais il est certainement des cadres qui fuient:
> objcallgraph.show_most_common_types() >tuple 24798 >frame 9601 >...
Mise à jour: Mes cadres sont sans aucun doute être divulgués. J'ai fait la suggestion à propos de gc.set_debug() et les images vont très lentement dans la liste gc.garbage. Pas même près de combien sont créés bien que show dans show_most_common_types(). J'ai une question sur la portée bien que, dans ce qui précède, ne pas f
sortir de la portée après la boucle for? Parce que je viens d'essayer ceci:
for f in range(20):
l = 1
print f
et 19. Ainsi imprimé pourrait-il être mon f
dans la boucle pour une fuite de? Ce graphique de référence d'une référence de cadre qui était dans ma liste de gc.garbage:
Update2:
Il ressemble à lui-même le module inspecter est la tenue des références aux cadres. Ceci est un objetgraph d'une référence arrière à partir d'un cadre en direct, pas un sur la liste des déchets.
Lien here parce qu'il est trop large.
Y a-t-il un moyen d'effacer le module d'inspection? Où sont ces cadres sauvés =
Que faites-vous avec le retour rv? –
Que montre gc.set_debug (gc.DEBUG_LEAK)? Vous devriez voir les objets qui ont fui dans sa sortie. – dcolish
Je ne savais même pas que je pouvais faire ça, je dois avoir scanné cela dans le doc. Je verrai ce que ça dit demain quand je serai de retour à mon ordinateur – Falmarri