0

我正在尝试使用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次以上,时间慢慢增加。最后几个值, 671ms 。. . . 9.879 毫秒 88.686 毫秒 135.954 毫秒

我正在使用 python-2.5.4 版本。

如果有人遇到过类似的问题。请给我一些意见。

谢谢达斯

4

2 回答 2

4

据我所知,packMessage正在单调增长:

packMessage  = packMessage + struct.pack("<b",msg[i])

如果你重复多次,它可能会变大,消耗大量内存,并且在某些时候你的应用程序可能会变得更慢。尝试查看tophtop运行程序时(在 中top,按M内存分配排序,f添加常驻内存字段)。

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

于 2010-10-27T10:34:05.093 回答
3

您是否检查过您的进程已打开的文件句柄的数量?您可能希望使用with 语句来确保它们在不再需要时关闭:

with open(filename, 'rb') as rfile:
    text = rfile.read()
    # etc.

with-block 离开时,文件将自动关闭。

于 2010-10-27T10:10:33.977 回答