繁体   English   中英

Python聊天:删除变量以清除函数中的内存?

[英]Python chat : delete variables to clean memory in functions?

我正在python和扭曲的框架中创建一个聊天守护进程。 我想知道是否必须删除我的函数中创建的每个变量,以便在连接多个用户时长期保存内存,或者这些变量是否自动清除? 这是我的代码的精简版,以说明我的观点:

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")

C Python(参考实现)使​​用引用计数和垃圾收集。 当对象的引用计数减少到0时,它会自动回收。 垃圾收集通常仅回收那些彼此引用的对象(或来自它们的其他对象),因此无法通过引用计数回收。

因此,在大多数情况下,在函数结束时回收局部变量,因为在函数退出时,对象停止从任何地方引用。 所以你的“del”语句是完全没必要的,因为无论如何Python都会这样做。

永远不会明确删除Python对象。 从未引用的Python对象中真正回收内存的唯一方法是通过垃圾收集器。 del关键字只是从对象中取消绑定名称,但该对象仍然需要进行垃圾回收。

如果你真的认为你必须这样做,你可以使用gc模块强制垃圾收集器运行,但这几乎肯定是一个不成熟的优化,你很可能在不合适的时候进行垃圾收集或者效率低下,除非你真的知道你什么'干嘛。

如上所述使用del没有实际效果,因为这些名称无论如何都会被删除。 您需要跟进显式垃圾收集以确保(r)。

Python使用垃圾收集。 这意味着您不必关心内存,因为它在不再使用时会自动释放。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM