Python中文件处理速度慢

0 投票
2 回答
1450 浏览
提问于 2025-04-16 06:09

我正在用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])

如果你多次重复这个操作,它可能会变得很大,消耗很多内存,最终可能导致你的程序变得非常慢。你可以在运行程序时查看一下 tophtop(在 top 中,按 M 可以按内存使用量排序,按 f 可以添加常驻内存字段)。

另外,每次都打开和读取同一个文件,从性能的角度来看并不是最好的解决方案。可以考虑在进入循环之前只读取一次这个文件。

撰写回答