饥饿的Python工作者中的内存泄漏

问题描述 投票:2回答:1

我有几个工作人员正在侦听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服务器通信。

python memory-leaks garbage-collection rabbitmq
1个回答
0
投票

fp = None之前加上一个标志,例如写入文件“完成”或打印到控制台。当您调用del或gc.collect()时,您的工作人员可能还不在那里。如果是,请检查您的execute_job方法。

© www.soinside.com 2019 - 2024. All rights reserved.