饥饿的Python工作者内存泄漏

时间:2013-09-29 10:05:28

标签: python memory-leaks garbage-collection rabbitmq

我有一些正在侦听RabbitMQ队列的工作人员正在进行一些磁盘I / O密集型工作 - 打开~18MB文件,对某些文件进行一些解析和写入。在处理一项工作时,一名工人可能需要多达200MB的内存..这很好。

然而,我的问题是工作人员继续闲置并仍然保留这么多的内存。我已经盲目地尝试在作业完成后用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中发生的所有事情都不应该包含在内存中,并且一旦我将该对象设置为None就会被删除吗?我也尝试过使用Python的del语句,但没有任何改进。

如果重要的话,我正在使用Python 2.7和python-pika与RabbitMQ服务器进行通信。

1 个答案:

答案 0 :(得分:0)

fp = None之前放置一个标志,就像写入文件“done”或打印到控制台一样。当你调用del或gc.collect()时,你的工作者可能还没有。如果是,请检查您的execute_job方法。