zelenin / go-worker-pool

Deadly simple worker pool

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

go-worker-pool

Deadly simple worker pool

Usage

package main

import (
	"errors"
	workerpool "github.com/zelenin/go-worker-pool"
	"log"
	"time"
)

func main() {
	pool := workerpool.NewPool(2, 2)

	go func() {
		log.Printf("error handler start")
		errorChan := pool.Errors()

		for {
			err, ok := <-errorChan
			if !ok {
				break
			}

			taskId := err.(workerpool.TaskError).Id
			err = errors.Unwrap(err)
			log.Printf("task #%d err: %s", taskId, err)
		}

		log.Printf("err handler finished")
	}()

	for i := int64(1); i < 100; i++ {
		log.Printf("Adding Task #%d", i)
		pool.AddTask(workerpool.NewTask(i, func(id int64) error {
			log.Printf("Task #%d started", id)
			time.Sleep(10 * time.Second)
			log.Printf("Task #%d finished", id)

			if id%2 == 0 {
				return errors.New("task error")
			}

			return nil
		}))
		log.Printf("Added Task #%d", i)
	}
	pool.Close()
	pool.Wait()
}

Author

Aleksandr Zelenin, e-mail: aleksandr@zelenin.me

About

Deadly simple worker pool


Languages

Language:Go 100.0%