查看 OP 发布的示例代码,我认为对 Python 正在做什么存在误解。
IE:
“逐行阅读”
import codecs
for i in codecs.open('unicodefile','r','utf8'):
print i
上面看起来像是逐行读取。但是,Python 将此解释为“将尽可能多的文件读入内存,然后将每个文件作为一行处理”。所以实际上,上面的 for 循环将所有内容读入内存。
“读入 RAM”
import codecs
for i in codecs.open('unicodefile','r','utf8').readlines():
print i
我相信上面的内容实际上与上面的“逐行”示例相同。即,Python 将其全部读入内存。
如果您想逐行测试性能,则需要“readline()”而不是“readlines()”或未指定的 for 循环,这可能意味着“readlines()”。这在 StackOverflow 站点的其他地方都有说明。
要考虑的另一个方面是文件系统缓冲。如果您对同一个文件运行相同的代码,那么您将面临文件系统缓冲污染结果的风险。正如您所说,您有 200GB 的内存,足以缓冲足够的文件以影响运行结果。
您需要执行以下操作以确保测试结果干净:
1)将大文件从已知来源复制到新文件名。(文件系统必须不是 COW 文件系统。) 2)刷新文件系统缓存 3)对文件运行第一个测试。4) 删除文件 5) 将文件从源重新复制到另一个新文件名。6) 刷新文件系统缓存 7) 对新文件运行第二个测试。
这将为您提供更准确的文件加载时间测试。
如果您想一次将整个文件加载到内存中,filehandle.read(bytes to read) 是否可能提供一种更快的块读取文件内容的方法?
无论哪种情况,供参考:
http://docs.python.org/2/tutorial/inputoutput.html