11
votes

Chat Python: Supprimer des variables pour nettoyer la mémoire dans les fonctions?

Je crée un démon de discussion dans le cadre python et tordu. Et je me demande si je dois supprimer toutes les variables Créer dans mes fonctions pour enregistrer la mémoire à long terme lorsque plusieurs utilisateurs sont connectés ou que cette variable est-elle automatiquement effacée?. Voici une version en bandoulière de mon code pour illustrer mon point: xxx


0 commentaires

3 Réponses :


4
votes

Python utilise la collecte des ordures. Cela signifie que vous n'avez pas à vous soucier de la mémoire car elle est libérée automatiquement quand elle n'est plus utilisée.


4 commentaires

La collecte des ordures Python est techniquement complètement facultative, est en fonction de la mise en œuvre et n'est pas garantie jamais, en particulier avec des références circulaires.


Les chances sont bonnes que CPPHON va améliorer son collecteur ordures à quelque chose qui peut traiter des références circulaires.


GS: le collecteur de poubelles CPPHON peut traiter des références circulaires pendant une longue période, depuis la version vers 2,0.


@ J S: Merci, je ne le savais pas.



7
votes

Les objets Python ne sont jamais supprimés explicitement. Le seul moyen de réellement récupérer la mémoire d'objets Python non référencés est via le collecteur des ordures. Le mot clé del inclète simplement un nom d'un objet, mais l'objet doit encore être déposé.

Si vous pensez vraiment que vous devez, vous pouvez forcer le collecteur des ordures à courir à l'aide du GC module, mais ceci est presque certainement une optimisation prématurée, et vous êtes assez susceptibles de prendre des ordures à l'inopportun ou de manière inefficace, à moins que vous vraiment savez ce que vous êtes faire.

Utiliser del Comme vous l'avez ci-dessus n'a pas d'effet réel, car ces noms auraient été supprimés car ils sont partis de toute façon. Vous auriez besoin de suivre une collection ordures explicite pour être sûr (R).


0 commentaires

16
votes

C Python (la mise en œuvre de la référence) utilise le comptage de référence et la collecte des ordures. Lors du nombre de références à une diminution de l'objet à 0, il est automatiquement récupéré. La collection à la poubelle ne recueille normalement que les objets qui se réfèrent aux autres (ou d'autres objets de ceux-ci) et ne peuvent donc pas être récupérés par le comptage de référence.

Ainsi, dans la plupart des cas, les variables locales sont récupérées à la fin de la fonction, car à la sortie de la fonction, les objets cessent d'être référencés de n'importe où. Donc, vos déclarations "DEL" sont totalement inutiles, car Python le fait quand même.


0 commentaires