• Fanout - 更容易的寫并發代碼

    1
    Git Github C/C++ 并發 Go 4693 次瀏覽

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

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




    一圖來說明。


    相似問題

    相關經驗

    相關資訊

    相關文檔

  • sesese色