Python 文件I/O代码逐渐变慢
我已经编写了解析大量电子邮件(640000个文件)的代码,输出是带有特定日期的电子邮件文件名列表。代码如下:Python 文件I/O代码逐渐变慢,python,file,file-io,Python,File,File Io,我已经编写了解析大量电子邮件(640000个文件)的代码,输出是带有特定日期的电子邮件文件名列表。代码如下: def createListOfFilesByDate(): searchDates = ["12 Mar 2012","13 Mar 2012"] outfile = "EmailList.txt" sent = "Sent:" fileList=glob.glob("./Emails/*.txt") foundDate = Fal
def createListOfFilesByDate():
searchDates = ["12 Mar 2012","13 Mar 2012"]
outfile = "EmailList.txt"
sent = "Sent:"
fileList=glob.glob("./Emails/*.txt")
foundDate = False
fout = open(outfile,'w')
for filename in fileList:
foundDate = False
with open(filename) as f:
header = [next(f) for x in xrange(10)]
f.close()
for line in header:
if sent in line:
for searchDate in searchDates:
if searchDate in line:
foundDate = True
break
if foundDate == True:
fout.write(filename + '\n')
break
fout.close()
问题是,代码处理前10000封电子邮件的速度相当快,但随后开始明显减慢,并且需要很长时间才能覆盖其余的电子邮件。我已经调查了一些可能的原因,但没有找到一个。我不知道我是否在做一些效率低下的事情 你的代码中有错误。它们与减速的关系尚不清楚。无论如何,您不应该调用
f.close()
,因为您已经有了with
,对于fout
也应该有with
,如果foundDate==True不应该在for line in header
循环中。顺便说一句,读前10行是错误的。标题可以更长,以空行结尾,可以换行(多行中有一个标题),foundDate=False
在文件列表中文件名的之外
没有任何意义。最后,要查看什么是慢的,请使用“运行脚本时是否检查了内存问题?”?这对我来说似乎相当有效。也许,在脚本完成后,尝试将结果保存在内存中并写入所有内容。在它尝试将其写入光盘之前,缓冲了多少数据?根本不确定这是否是代码中的错误。如果你在任何地方都有一个写头缓存——甚至可能在你的RAID控制器中,特别是在备有电池的情况下更为常见——那么写入缓存的速度将比满时快得多,需要等待缓冲区刷新。因此,无论应用程序的行为如何,磁盘I/O通常都是突发性的。请分析您的代码,看看它在哪里花费了大部分时间,这样您和其他人就可以停止猜测了。这很容易做到,明白吗