## Mix Worker Pool
通用的工作池类库
A common workerpool class library
> 该库还有 php 版本:https://github.com/mix-php/worker-pool
## Installation
- 安装
```
go get -u github.com/mix-go/workerpool
```
## Usage
先创建一个 Worker 结构体
~~~
type FooWorker struct {
workerpool.WorkerTrait
}
func (t *FooWorker) Do(data interface{}) {
// do something
}
func NewFooWorker() workerpool.Worker {
return &FooWorker{}
}
~~~
调度任务
~~~
jobQueue := make(chan interface{}, 200)
d := workerpool.NewDispatcher(jobQueue, 15, NewFooWorker)
go func() {
// 投放任务
for i := 0; i < 10000; i++ {
jobQueue <- i
}
// 投放完停止调度
d.Stop()
}()
d.Run() // 等待任务全部执行完成并停止全部 Worker
~~~
异常处理:`Do` 方法中执行的代码,可能会出现 `panic` 异常,这时该 Worker 当前协程会抛出 `panic`,然后会重启一个新的协程继续处理任务。我们可以通过 `recover` 获取异常信息记录到日志或者执行其他处理
~~~
func (t *FooWorker) Do(data interface{}) {
defer func() {
if err := recover(); err != nil {
// handle error
}
}()
// do something
}
~~~
## License
Apache License Version 2.0, http://www.apache.org/licenses/