考虑下面的需求:
我们有一个日志目录,里面全是gzip压缩的日志文件。
每个日志文件的格式是固定的,我们要从中提取出所有访问过robots.txt文件的主机
1.1.1.1 ------------ [10/june/2012:00:18:50 - 0500] "GET /robots.txt ..." 200 71
2.1.1.3 ------------ [12/june/2013:00:18:50 - 0500] "GET /a.txt ..." 202 73
122.1.1.3 ------------ [12/june/2013:00:18:50 - 0500] "GET /robots.txt ..." 202 73
不使用并发,我们会写出如下的程序代码:
import gzip
import glob
import io
def find_robots(filename):
robots = set()
with gzip.open(filename) as f:
for line in io.TextIOWrapper(f, encoding='ascii'):
fields = line.split()
if fields[6] == '/robots.txt':
robots.add(fields[0])
return robots
def find_all_robots(logdir):
files = glob.glob(logdir+'/*.log.gz')
all_robots = set()
for robots in map(find_robots, files):