Fanout - 更容易得写并发代码
发布时间:2020-12-16 18:46:41 所属栏目:大数据 来源:网络整理
导读:不用管理 grouting 和 channel 了。 以下为转发 golangtc.com 原文: 刚刚写了个包,觉得值得出来分享下: 文档: https://github.com/sunfmin/fanout 用来简化并发程序(goroutine,channel)的编写,这个包直接改写自Go Concurrency Patterns: Pipelines博客的
不用管理 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 %sn",outr.word,outr.domain) } else { fmt.Printf("ttt %s %s %sn",outr.domain,outr.summary) } if err != nil { fmt.Println("Error: ",err) } return outr,nil },inputs) fmt.Println("Finished ",len(results),",Error:",err2) 一图来说明:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |