Python在使用Yield时耗尽内存

时间:2015-06-12 01:01:21

标签: python

以下是故事:

我有一个765GB的文本文件,必须进行解析。下面,我已经包含了相关的代码:

def ingest(filename):
    with open(filename, 'rb') as food:
        for line in food:
            yield line

处理完大约56GB后,我得到一个KILLED语句,表明进程内存不足。快速STRACE表示模块在运行上面显示的函数时死亡。它还显示正在读取的每一行。

这就是我的困惑。一方面,for循环想要遍历其所有元素。另一方面,yield语句应强制对iterable进行惰性求值,并在调用next()/__next__时生成每个元素。或者我想。

在这种情况下,为什么函数会尝试一次读取所有行;而不是一个一个地阅读?

我该如何解决这个特殊问题?

0 个答案:

没有答案