处理大文件是使用yield
上一篇 /
下一篇 2016-05-26 14:33:48
/ 个人分类:python
最近使用python处理系统日志,由于同一天都会有很多日志,处理的结果都会按照相同日期统计到一个文件中。因此在脚本中采用多进程和多线程进行处理。
每个进程处理同一个日期的日志文件,在进程之下根据那个日期日志文件的数量启动相同数量的线程分别处理单个文件。
脚本完成后,实际执行过程中,内存消耗非常大,这个固然与日志文件太大有关系,同时我也觉得代码中对日志文件的处理有问题。详细的审视了一下代码,发现读取日志文件以及日志文件数据的临时存储很糟糕。其中使用了比较多的列表保存代码执行过程中的数据,当数据越来越多时,对系统内存的消耗就会越来越大。
首先考虑的是解决读取日志文件的优化问题。通常我们在读取日志文件都是以下面的方式进行:
def read_file(path):
with open(path,'r') as f:
for line in f:
print line
这样的处理方式对于小文件来说是没有问题的,如果文件很大并且数量很多时,就会消耗很多的内存。
其实在进行文件读取这一步是,可以使用yield,如下:
def read_file(path):
with open(path,'r') as f:
for line in f:
yield line
这样可以极大的降低读取文件时对内存的占用。
收藏
举报
TAG: