golang workpool 工作池

xie1xiao1jun · · 1004 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

## [gowp](https://github.com/xxjwxc/gowp) ## golang worker pool ,线程池 , 工作池 - 并发限制goroutine池。 - 限制任务执行的并发性,而不是排队的任务数。 - 无论排队多少任务,都不会阻止提交任务。 - 通过队列支持 - golang 工作池公共库 ### 支持最大任务数, 放到工作池里面 并等待全部完成 ``` package main import ( "fmt" "time" "github.com/xxjwxc/gowp/workerpool" ) func main() { wp := workerpool.New(10) //Set the maximum number of threads,设置最大线程数 for i := 0; i < 20; i++ { //开启20个请求 ii := i wp.Do(func() error { for j := 0; j < 10; j++ { //每次打印0-10的值 fmt.Println(fmt.Sprintf("%v->\t%v", ii, j)) time.Sleep(1 * time.Second) } //time.Sleep(1 * time.Second) return nil }) } wp.Wait() fmt.Println("down") } ``` ### 支持错误返回 ``` package main import ( "fmt" "time" "github.com/xxjwxc/gowp/workerpool" ) func main() { wp := workerpool.New(10) //Set the maximum number of threads,设置最大线程数 for i := 0; i < 20; i++ { //开启20个请求 ii := i wp.Do(func() error { for j := 0; j < 10; j++ { //每次打印0-10的值 fmt.Println(fmt.Sprintf("%v->\t%v", ii, j)) if ii == 1 { return errors.Cause(errors.New("my test err")) //有err 立即返回 } time.Sleep(1 * time.Second) } return nil }) } err := wp.Wait() if err != nil { fmt.Println(err) } fmt.Println("down") } ``` ### 支持判断是否完成 (非阻塞) ``` package main import ( "fmt" "time" "github.com/xxjwxc/gowp/workerpool" ) func main() { wp := workerpool.New(5) //Set the maximum number of threads,设置最大线程数 for i := 0; i < 10; i++ { //开启20个请求 // ii := i wp.Do(func() error { for j := 0; j < 5; j++ { //fmt.Println(fmt.Sprintf("%v->\t%v", ii, j)) time.Sleep(1 * time.Second) } return nil }) fmt.Println(wp.IsDone())//判断是否完成 } wp.Wait() fmt.Println(wp.IsDone()) fmt.Println("down") } ``` ### 支持同步等待结果 ``` package main import ( "fmt" "time" "github.com/xxjwxc/gowp/workerpool" ) func main() { wp := workerpool.New(5) //Set the maximum number of threads,设置最大线程数 for i := 0; i < 10; i++ { //开启20个请求 ii := i wp.DoWait(func() error { for j := 0; j < 5; j++ { fmt.Println(fmt.Sprintf("%v->\t%v", ii, j)) // if ii == 1 { // return errors.New("my test err") // } time.Sleep(1 * time.Second) } return nil //time.Sleep(1 * time.Second) //return errors.New("my test err") }) } err := wp.Wait() if err != nil { fmt.Println(err) } fmt.Println("down") } ``` 代码地址:[gowp](https://github.com/xxjwxc/gowp) [喜欢请给星](https://github.com/xxjwxc/gowp)

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1004 次点击  ∙  1 赞  
加入收藏 微博
2 回复  |  直到 2019-09-16 10:15:52
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传