美文网首页
golang并发读取文件并开启工作池处理数据

golang并发读取文件并开启工作池处理数据

作者: funcx | 来源:发表于2019-03-15 12:00 被阅读0次
    func main() {
        strCh := make(chan string)
        wg := sync.WaitGroup{}
        for i := 0; i < 20; i++ {
            wg.Add(1)
            go func() {
                defer wg.Done()
                for str := range strCh {
                    log.Info.Println(str)
                }
            }()
        }
    
        ReadFiles2Chan(filePaths, strCh)
        close(strCh)
    
        wg.Wait()
        log.Info.Println("正常退出")
    }
    
    // 并发读取文件将文件行放入管道
    func ReadFiles2Chan(filePaths []string, strCh chan string) {
        var wg sync.WaitGroup
        for _, filePath := range filePaths {
            wg.Add(1)
            go func(path string) {
                defer wg.Done()
                f, err := os.Open(path)
                if err != nil {
                    log.Error.Fatal(err)
                }
                scanner := bufio.NewScanner(mahonia.NewDecoder("gbk").NewReader(f))
                scanner.Split(bufio.ScanLines)
                i := -1
                for scanner.Scan() {
                    if i++; i < 2 {
                        continue
                    }
                    strCh <- scanner.Text()
                }
            }(filePath)
        }
        wg.Wait()
    }
    

    相关文章

      网友评论

          本文标题:golang并发读取文件并开启工作池处理数据

          本文链接:https://www.haomeiwen.com/subject/jzjlmqtx.html