我有几个工作人员正在监听RabbitMQ队列,并且正在进行一些磁盘I/O密集型工作 - 打开〜18MB文件,执行一些解析并写入某些文件。处理一份工作时,工作人员可能需要高达200MB的内存......这很好。饥饿的Python工作者中的内存泄漏
但是,我的问题是,工作人员继续闲置,仍然保留这些内存。在作业完成后,我已经盲目尝试使用gc.collect()手动进行垃圾回收,但没有任何结果。
接收工作我工人阶级是这样的:
class BuildWorker(worker.Worker):
def callback(self, ch, method, properties, body):
fp = FileParseAndStuff()
fp.execute_job(ch, method, properties, body)
fp = None
不应该这里面FP这里发生的一切包含内存明智和一次删除我设置对象为无?我也尝试过使用Python的del语句,但没有任何改进。
我使用Python 2.7和python-pika与RabbitMQ服务器通信,如果有问题。
您可以尝试使用[objgraph](http://mg.pov.lt/objgraph/)找出哪些对象占用此空间。 – fjarri
看到这个http://stackoverflow.com/questions/11957539/python-memory-not-being-given-back-to-kernel –