Nik*_*as9 6 python garbage-collection memory-leaks 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
Run Code Online (Sandbox Code Playgroud)
不应该在 fp 中发生的所有事情都包含在内存中并在我将该对象设置为 None 后将其删除吗?我也尝试使用 Python 的 del 语句,但没有任何改进。
如果重要的话,我正在使用 Python 2.7 和 python-pika 与 RabbitMQ 服务器进行通信。
在之前放置一个标志fp = None,例如写入文件“完成”或打印到控制台。当您调用 del 或 gc.collect() 时,您的工作人员可能还没有在那里。如果是,请检查您的execute_job 方法。