|
1 year ago | |
---|---|---|
README.md | 1 year ago | |
manager.go | 2 years ago | |
manager_test.go | 2 years ago |
Go Unit Manager is a simple Goroutine unit manager for GoLang.
Features:
os.Signal
events.A unit is a type that implements WorkUnit
interface. The Spawn()
method
of each registered unit is spawned in its own goroutine.
The Manager
handles communication and synchronized shutdown procedure.
WorkUnit
on your goroutinesQuit
channelimport (
"os"
"log"
"time"
gum "git.sp4ke.com/sp4ke/gum.git"
)
type Worker struct{}
// Example loop, will be spwaned inside a goroutine
func (w *Worker) Spawn(um UnitManager) {
ticker := time.NewTicker(time.Second)
// Worker's loop
for {
select {
case <-ticker.C:
log.Println("tick")
// Read from channel if this worker unit should stop
case <-um.ShouldStop():
// Shutdown work for current unit
w.Shutdown()
// Notify manager that this unit is done.
um.Done()
}
}
}
func (w *Worker) Shutdown() {
// Do shutdown procedure for worker
return
}
func NewWorker() *Worker {
return &Worker{}
}
func main() {
// Create a unit manager
manager := gum.NewManager()
// Shutdown all units on SIGINT
manager.ShutdownOn(os.Interrupt)
// NewWorker returns a type implementing WorkUnit interface unit :=
worker := NewWorker()
worker2 := NewWorker()
// Register the unit with the manager
manager.AddUnit(worker)
manager.AddUnit(worker2)
// Run the manager
go manager.Run()
// Wait for all units to shutdown gracefully through their `Shutdown` method
<-manager.Quit
}
This repo is a mirror. For any question or issues use the repo hosted at https://git.sp4ke.com/sp4ke/gum.git