Skip to content
This repository has been archived by the owner on Feb 24, 2019. It is now read-only.

hlts2/gworker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

60 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

gworker

gworker is simple dispatch worker management library written in golang.

Requirement

Go (>= 1.8)

Installation

go get github.com/hlts2/gworker

Example

func main() {

    // Generates 3 workers
    d := gworker.NewDispatcher(3)

    // Register finish monitoring of all jobs.
    // When all jobs are completed, a notification is sent to `<-d.Finish()`.
    d.StartJobObserver()

    for i := 0; i < 100; i++ {

        // Add adds job
        d.Add(func() error {
            time.Sleep(time.Second * 1)
            return nil
        })
    }

    // Start starts workers.
    d.Start()

    for i := 0; i < 100; i++ {
        d.Add(func() error {
            time.Sleep(time.Second * 2)
            return errors.New("errors.New")
        })
    }

    // Scale up the number of worker.
    d.UpScale(20)

FINISH_ALL_JOB:
    for {
        select {
        case err := <-d.JobError():  // get job error
            fmt.Println(err)
        case _ = <-d.Finish():       // When all the jobs are finished, notification comes
            break FINISH_ALL_JOB
        }
    }

    // Stop stops workers.
    // In the case of this example, 23 workers are stopped.
    d.Stop()
}

Future

  • Auto scaling of worker

Automatically scaled up when there are many jobs and fewer workers, while scaled down when there are fewer jobs and more workers.

Author

hlts2

LICENSE

gworker released under MIT license, refer LICENSE file.