2010-10-27 43 views
0

我正在尝试使用python.Aim的文件操作是不断读取大小(100字节)的文件,打包并通过套接字发送它们。这些文件是从目录中读取的。在python中慢文件处理

问题:当我连续运行程序时,执行时间在增加。最初,执行时间不到一秒钟;后来达到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 

该文件是二进制文件。采取

初始时间:对10次以上,时间慢慢增加连续执行671毫秒

。 最后几个值, 671ms 。 。 。 。 9.879 ms 88.686 ms 135.954 ms

我正在使用python-2.5.4版本。

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

感谢 达斯

+1

我看不到rfile.close() – soulseekah 2010-10-27 10:15:33

+2

请发布实际运行代码,这里有几个语法错误会阻止它运行。 – 2010-10-27 10:22:23

回答

3

你检查的文件处理您的进程打开了多少?您可能希望哟使用with-statement,以确保当不再需要他们得到休息:

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

with - 块留,该文件将自动关闭。

4

从我所看到的,packMessage是单调递增:

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

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

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