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