【发布时间】:2014-01-26 19:14:18
【问题描述】:
我正在编写一个扭曲的 PB 应用程序,它似乎使用了大量的内存,并且在用户断开连接时似乎永远不会被释放。
我有一个 pb.Root 对象,客户端连接到该对象并调用一个返回 pb.Referenceable 对象的远程方法,该对象在创建时将大量信息(大约 2GB 的数据)读入内存以加快速度行动。该对象以及有关客户端的其他一些信息被插入到一个列表中。
当客户端与服务器断开连接时,我会对该对象调用一些清理操作以删除对正在存储的缓存对象的引用。 chunkCache 是我存储数据的字典。
def disconnected(self):
self.connected = False
self.chunkCache = None
self.cur.close()
一旦客户端根据 top never drop 断开内存使用量,它仍然显示 2Gb。
我应该担心这个还是分配的内存会在需要时被释放,或者如果没有任何想法我可以如何释放这些内存?它是在创建对象时创建的,而不是在其他任何地方传递。
在该对象内部,我确实有一个 deferToThread 调用,这会阻止正在释放的项目吗?
我在 Linux 上使用 python 2.7。
更新:
我很困惑,我刚刚在我的对象中添加了自定义__del__ 方法并在其中放置了一个打印语句并且它们正在被删除,那么为什么内存使用量永远不会下降?
谢谢
院长
【问题讨论】:
标签: python-2.7 memory twisted perspective-broker