## 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/