Question

Je crée un démon de chat en python et cadre tordu. Et je me demande si je dois supprimer toutes les variables créer dans mes fonctions pour économiser de la mémoire à long terme, lorsque plusieurs utilisateurs sont connectés, ou sont ceux variables automatiquement claires ?. Voici une bande vers le bas version de mon code pour illustrer mon point:

class Chat(LineOnlyReceiver):

    LineOnlyReceiver.MAX_LENGTH = 500

    def lineReceived(self, data):

            self.sendMessage(data)

    def sendMessage(self, data):

            try:
                message = data.split(None,1)[1]
            except IndexError:
                return

            self.factory.sendAll(message)

            #QUESTION : do i have to delete message and date??????????????????

            del message
            del data


class ChatFactory(Factory):
    protocol = Chat

    def __init__(self):
        self.clients = []

    def addClient(self, newclient):
        self.clients.append(newclient)

    def delClient(self, client):
        self.clients.remove(client)

    def sendAll(self, message):
        for client in self.clients:
            client.transport.write(message + "\n")
Était-ce utile?

La solution

C python (la mise en oeuvre de référence) utilise le comptage de références et la collecte des déchets. Lorsque le nombre de références à l'objet baisse à 0, il est récupéré automatiquement. La collecte des ordures normalement que les récupère des objets qui se réfèrent les uns aux autres (ou d'autres objets d'eux) et ne peuvent donc pas être remis en état par comptage de référence.

Ainsi, dans la plupart des cas, sont remis en état à la fin de la fonction des variables locales, car à la sortie de la fonction, les objets cessent d'être référencés partout. Ainsi, vos « del » déclarations sont totalement inutiles, parce que Python fait que de toute façon.

Autres conseils

Les objets Python ne sont jamais explicitement supprimés. La seule façon de récupérer vraiment la mémoire des objets non référencés Python est par le garbage collector. Le mot-clé del délie simplement un nom d'un objet, mais l'objet doit encore être garbage collection.

Si vous pensez vraiment que vous devez, vous pouvez forcer le garbage collector pour exécuter en utilisant le gc module, mais cela est certainement une optimisation prématurée, et vous êtes tout à fait susceptibles d'ordures recueillir à des moments inopportuns ou autrement, sauf si vous inefficacement vraiment savoir ce que vous faites.

Utilisation del que vous avez ci-dessus présente aucun effet réel, étant donné que ces noms auraient été supprimés car ils se sont hors de portée de toute façon. Vous devrez suivre avec une collection d'ordures explicites pour être sûr (r).

Python utilise la collecte des ordures. Cela signifie que vous ne devez pas se soucier de la mémoire car il est libéré automatiquement quand on ne l'utilise plus.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top