1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- package main
-
- type Task struct {
- ID string
- Payload interface{}
- }
-
- type TaskCallback func(Task) error
-
- type JobPool struct {
-
- pools int
-
- tasks chan Task
-
- callback TaskCallback
-
- result chan int
- }
-
-
- func NewJobPool() *JobPool {
- return &JobPool{
- pools: 10,
- tasks: make(chan Task, 100),
- result: make(chan int),
- }
- }
-
-
- func (t *JobPool) Push(task Task) {
- t.tasks <- task
- }
-
-
- func (t *JobPool) Callback(f TaskCallback) {
- t.callback = f
- }
-
-
- func (t *JobPool) Start() {
- for i := 0; i < t.pools; i += 1 {
- go func() {
- for {
- task := <-t.tasks
- t.callback(task)
-
- t.result <- 1
- }
- }()
- }
- }
-
- func (t *JobPool) Done(total int) {
- cursor := 0
- if total < 1 {
- return
- }
-
- for {
- <-t.result
- cursor += 1
-
- if cursor >= total {
- break
- }
- }
- }
|