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