我正在尝试处理一个日志文件,其每一行看起来像这样:
flow_stats: 0.30062869162666672 gid 0 fid 1 pkts 5.0 fldur 0.30001386666666674 avgfldur 0.30001386666666674 actfl 3142 avgpps 16.665896331902879 finfl 1
我对这个pkts领域和fldur领域都很感兴趣。我有一个Python脚本,可以读取一百万行的日志文件,为所有不同持续时间的每个数据包创建一个列表,对这些列表进行排序,并在3秒钟内找出中值。
我正在玩Go编程语言,以为我会重写它,希望它能更快地运行。
到目前为止,我一直很失望。仅将文件读入数据结构大约需要5.5秒。所以我想知道你们中的一些很棒的人是否可以帮助我更快地完成任务。
这是我的循环:
data := make(map[int][]float32)
infile, err := os.Open("tmp/flow.tr")
defer infile.Close()
if err != nil {
panic(err)
}
reader := bufio.NewReader(infile)
line, err := reader.ReadString('\n')
for {
if len(line) == 0 {
break
}
if err != nil && err != io.EOF {
panic(err)
}
split_line := strings.Fields(line)
num_packets, err := strconv.ParseFloat(split_line[7], 32)
duration, err := strconv.ParseFloat(split_line[9], 32)
data[int(num_packets)] = append(data[int(num_packets)], float32(duration))
line, err = reader.ReadString('\n')
}
请注意,实际上我确实err在循环中检查了s-为了简洁起见,我省略了它。 google-pprof表明大部分时间被消耗在strings.Fields用strings.FieldsFunc,unicode.IsSpace和runtime.stringiter2。
我怎样才能使它运行得更快?
慕哥6287543
相关分类