Fanout - 更容易得寫並發代碼

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

不用管理 grouting 和 channel 了。 以下為轉寄 golangtc.com 原文:

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

文檔: 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)

一圖來說明:

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.