Python中文件处理速度慢
我正在用Python进行文件操作。我的目标是不断读取一个大小为100字节的文件,然后通过网络发送这些文件。这些文件是从一个文件夹里读取的。
问题是:当我连续运行这个程序时,执行的时间越来越长。一开始,执行时间不到一秒;后来却达到了8到10秒。我找不到导致延迟的具体原因。如果有人能帮我分析一下这个问题,那就太好了。
这里是我的代码...
def handlefile(filename):
for sat in range(len(Numfiles)):
filename =
fsize = os.path.getsize(filename)
if fsize != 100:
continue
rfile = open(filename,'rb')
text = rfile.read()
msg = struct.unpack("<100b",text)
for i in range(len(msg)):
packMessage = packMessage + struct.pack("<b",msg[i])
print "time:",datetime.datetime.now() - startTime
这些文件是二进制文件。
最初的耗时:671毫秒
连续执行超过10次后,时间慢慢增加。最后几个值是: 671毫秒 . . . . 9.879毫秒 88.686毫秒 135.954毫秒
我使用的是Python 2.5.4版本。
如果有人遇到过类似的问题,请给我一些建议。
谢谢 Das
2 个回答
3
你有没有检查过你的程序打开了多少个文件句柄?你可能需要使用with语句,这样可以确保在不需要的时候文件会被自动关闭:
with open(filename, 'rb') as rfile:
text = rfile.read()
# etc.
当你离开with
这个代码块时,文件会自动关闭。
4
从我看到的情况来看,packMessage
是在不断增加的:
packMessage = packMessage + struct.pack("<b",msg[i])
如果你多次重复这个操作,它可能会变得很大,消耗很多内存,最终可能导致你的程序变得非常慢。你可以在运行程序时查看一下 top
或 htop
(在 top
中,按 M 可以按内存使用量排序,按 f 可以添加常驻内存字段)。
另外,每次都打开和读取同一个文件,从性能的角度来看并不是最好的解决方案。可以考虑在进入循环之前只读取一次这个文件。