【发布时间】:2013-10-05 06:49:27
【问题描述】:
我有一些工作人员正在侦听 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 服务器通信,如果这很重要的话。
【问题讨论】:
-
你可以尝试找出哪些对象占用了这个空间,使用objgraph。
-
我遇到了同样的问题(尽管使用 Python 3.6)。我认为我的工作人员正在关闭一切,通道、数据库连接等。但随着时间的推移,系统内存不足。
-
问题可能出在 FileParseAndStuff 但没有代码没人能说
标签: python memory-leaks garbage-collection rabbitmq