我有一个生成大对象的函数(在具有500Gb内存的机器上大约100-150Gb的内存)。
该函数在大约1小时内运行,并将文件写入磁盘(大约100Mb)。
但是当函数结束时,程序会在那里挂起几个小时而不做任何事情(在调用函数的地方之后它不会继续执行指令)。
我怀疑垃圾收集器试图删除在这个函数中创建的巨大对象,但我没有看到任何事情发生(strace打印没有),内存没有减少。
你知道为什么会这样,以及如何解决它? 我使用的是python 3.5
答案 0 :(得分:1)
当然不是一个答案,但这是Python Developers邮件列表中的一个线程,它描述了一些听起来像您正在经历的行为(我也经历过)。 https://mail.python.org/pipermail/python-dev/2008-December/084450.html
在线程中进行了一些挖掘,发现了一些有趣的事情:
一种可能的解决方法是删除字典,同时仍然保留对字典中对象的引用。它在此消息中显示(非常接近线程结尾)。 https://mail.python.org/pipermail/python-dev/2008-December/084560.html
不幸的是,我无法从该线程中看到明确的解决方案,但是希望这有助于阐明正在发生的事情!