Fanout - 更容易的寫并發代碼

sunfmin 9年前發布 | 12K 次閱讀 并發


剛剛寫了個包,覺得值得出來分享下:

文檔: https://github.com/sunfmin/fanout

用來簡化并發程序(goroutine, channel)的編寫,這個包直接改寫自Go Concurrency Patterns: Pipelines博客的最后一個樣例程序。

平時寫帶goroutine和channel的程序,總是時不時的爆"fatal error: all goroutines
are asleep - deadlock!",檢查起來又很難找原因。


例子程序 - 用60個goroutine一起跑whois來查看域名是不是還在:

     inputs := []interface{}{}

for _, word:= range domainWords {
    inputs = append(inputs, word)
}

results, err2 := fanout.ParallelRun(60, func(input interface{})
(interface{}, error) {
    word := input.(string)
    if strings.TrimSpace(word) == "" {
        return nil, nil
    }

    py := pinyin.Convert(word)
    pydowncase := strings.ToLower(py)
    domain := pydowncase + ".com"
    outr, err := domainAvailable(word, domain)

    if outr.available {
        fmt.Printf("[Ohh Yeah] %s %s\n", outr.word, outr.domain)
    } else {
        fmt.Printf("\t\t\t %s %s %s\n", outr.word, outr.domain, outr.summary)
    }

    if err != nil {
        fmt.Println("Error: ", err)
    }

    return outr, nil
}, inputs)

fmt.Println("Finished ", len(results), ", Error:", err2)</pre><br />




一圖來說明。



項目主頁:http://www.baiduhome.net/lib/view/home/1421056418875

 本文由用戶 sunfmin 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!