Python:我如何估计算法将使用的总内存?

时间:2016-03-01 19:12:43

标签: python memory split

我的算法首先读取了大量的文本样本。接下来,我需要将它们分成几行:

texts = file_content.split("\n")

但是,该文件太大,以至于该过程立即进入SWAP。 我想预测一下,我实际需要多少内存。 这可能吗?

3 个答案:

答案 0 :(得分:1)

在继续之前,以字节为单位确定文件的大小可能会有所帮助。这可能会让您粗略估计您需要的内存量。

要获取文件的大小,您可以使用getsize(path中的os.path方法。

import os
size_in_bytes = os.path.getsize('file.txt')

但是,您可能需要两倍的文件大小内存 - 您将文件存储在内存中,以及从文件中读取的字符串。

正如Kasra指出的那样,你最好通过迭代器(只是open()方法)逐行读取文件,并逐行执行处理,减少额外的需求存储器中。

例如:

with open('file.txt') as f:
    line = f.readline()
    process(line)

答案 1 :(得分:0)

1事情只是为了优化您的代码,但您询问了内存使用情况。你可以在这里看到一篇好文章http://fa.bianp.net/blog/2013/different-ways-to-get-memory-consumption-or-lessons-learned-from-memory_profiler/。使用库psutil,您只需使用这些代码行来获取内存使用情况

import os
import psutil
process = psutil.Process(os.getpid())
print process.memory_info().rss

答案 2 :(得分:0)

无法预测算法应该使用的内存量。但是不是一次读取整个文本并将其作为更加pythonic的方式加载到内存中,而是可以使用open()来返回一个像对象一样的迭代器的文件对象,并且不会浪费你的记忆。您只需循环遍历文件对象即可访问这些行。