| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
sunfmin
10年前发布

Fanout - 更容易的写并发代码


刚刚写了个包,觉得值得出来分享下:

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




一图来说明。



项目主页:http://www.open-open.com/lib/view/home/1421056418875

 本文由用户 sunfmin 自行上传分享,仅供网友学习交流。所有权归原作者,若您的权利被侵害,请联系管理员。
 转载本站原创文章,请注明出处,并保留原始链接、图片水印。
 本站是一个以用户分享为主的开源技术平台,欢迎各类分享!
 本文地址:https://www.open-open.com/lib/view/open1421056418875.html
并发