6

我有一些工作人员正在监听 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 服务器通信。

4

1 回答 1

0

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

于 2013-09-29T11:07:04.850 回答