OpenMix 出品:https://openmix.org
Mix XWP
通用的工作池
A common worker pool
Github
Installation
go get github.com/mix-go/xwp
Usage
先創(chuàng)建一個結(jié)構體用來處理任務栏账,使用類型斷言轉(zhuǎn)換任務數(shù)據(jù)類型允跑,例如:i := data.(int)
type Foo struct {
}
func (t *Foo) Do(data interface{}) {
// do something
}
調(diào)度任務
- 也可以使用
RunF
采用閉包來處理任務 - 如果不想阻塞執(zhí)行切心,可以使用
p.Start()
啟動
jobQueue := make(chan interface{}, 200)
p := &xwp.WorkerPool{
JobQueue: jobQueue,
MaxWorkers: 1000,
InitWorkers: 100,
MaxIdleWorkers: 100,
RunI: &Foo{},
}
go func() {
// 投放任務
for i := 0; i < 10000; i++ {
jobQueue <- i
}
// 投放完停止調(diào)度
p.Stop()
}()
p.Run() // 阻塞等待
異常處理:Do
方法中執(zhí)行的代碼,可能會出現(xiàn) panic
異常擅编,我們可以通過 recover
獲取異常信息記錄到日志或者執(zhí)行其他處理
func (t *Foo) Do(data interface{}) {
defer func() {
if err := recover(); err != nil {
// handle error
}
}()
// do something
}
查看 Workers
的執(zhí)行狀態(tài):通常可以使用一個定時器,定時打印或者告警處理
go func() {
ticker := time.NewTicker(1000 * time.Millisecond)
for {
<-ticker.C
log.Printf("%+v", p.Stat()) // 2021/04/26 14:32:53 &{Active:5 Idle:95 Total:100}
}
}()
License
Apache License Version 2.0, http://www.apache.org/licenses/