我目前在 Perl 中处理了 5 个巨大的(每个 400 万行)日志文件,我想我可以尝试在 Go 及其并发功能中实现相同的功能。因此,由于对 Go 非常缺乏经验,我正在考虑按以下方式进行操作。对这种方法的任何评论将不胜感激。一些粗略的伪代码:
var wg1 sync.WaitGroup
var wg2 sync.WaitGroup
func processRow (r Row) {
wg2.Add(1)
defer wg2.Done()
res = <process r>
return res
}
func processFile(f File) {
wg1.Add(1)
open(newfile File)
defer wg1.Done()
line = <row from f>
result = go processRow(line)
newFile.Println(result) // Write new processed line to newFile
wg2.Wait()
newFile.Close()
}
func main() {
for each f logfile {
go processFile(f)
}
wg1.Wait()
}
所以,想法是我同时处理这 5 个文件,然后每个文件的所有行也将依次同时处理。
那行得通吗?
江户川乱折腾
相关分类