Simple goroutine manager
package main
import (
"gorun"
"fmt"
"net/http"
"time"
)
func main() {
gorun.WM().AddWorker("testWorker", map[string]interface{}{"data": 123}, func(w *gorun.Worker) {
defer w.Stop()
for {
if w.IsRun() {
fmt.Println(`Worker `, w.Name, ` is working`)
time.Sleep(1 * time.Second)
}
if w.IsPause() {
fmt.Println(`Worker `, w.Name, ` is pause`)
time.Sleep(1 * time.Second)
}
}
})
gorun.WM().AddWorker("testWorker2", map[string]interface{}{"data": 123}, func(w *gorun.Worker) {
defer w.Stop()
for {
if w.IsRun() {
fmt.Println(`Worker `, w.Name, ` is working`)
time.Sleep(1 * time.Second)
}
if w.IsPause() {
fmt.Println(`Worker `, w.Name, ` is pause`)
time.Sleep(1 * time.Second)
}
}
})
if w, err := gorun.WM().Get(`testWorker`); err != nil {
fmt.Println(err)
} else {
fmt.Println(`Worker:`, w.Name, `exists`)
}
if w, err := gorun.WM().Get(`testWorker2`); err != nil {
fmt.Println(err)
} else {
fmt.Println(`Worker:`, w.Name, `exists`)
}
if w, err := gorun.WM().Get(`testWorker32`); err != nil {
fmt.Println(err)
} else {
fmt.Println(`Worker:`, w.Name, `exists`)
}
gorun.WM().RunAll()
time.Sleep(5 * time.Second)
gorun.WM().PauseAll()
time.Sleep(5 * time.Second)
gorun.WM().RunAll()
time.Sleep(5 * time.Second)
if w, err := gorun.WM().Get(`testWorker`); err == nil {
w.Pause()
time.Sleep(5 * time.Second)
}
gorun.WM().RemoveWorker(`testWorker`)
gorun.WM().RemoveWorker(`testWorker`)
}gorun.WM() - return worker manager singleton instance
gorun.New() - create new worker manager
gorun.WM().AddWorker(worker_name string, worker_data interface{}, gorutine_fn) - add new worker
params:
name - string - worker name
params - interface{} - worker data
gorutine_fn -func (w *gorun.Worker) - worker gorutine function
gorun.WM().Get(string) - return worker by name or error
gorun.WM().RunAll() - run all workers
gorun.WM().StopAll() - stop all workers and remove
gorun.WM().PauseAll() - pause all workers without remove
gorun.WM().GetWorkers() - return list of workers map[string]*Worker
gorun.WM().RemoveWorker(worker_name string) - stop and remove worker, return error if worker not found
gorun.WM().UpdateWorker(worker_name string, params interface) - update worker data, return error if worker not found (stop or remove)
gorun.WM().SetStatus(worker_name string, status int) - change worker status
available statuses:
-
gorun.WorkerCreate- worker created, not run -
gorun.WorkerRun- worker run -
gorun.WorkerStop- worker removed -
gorun.WorkerPause- worker paused,
worker.Run() - run worker
worker.Stop() - stop worker and remove from worker manager
worker.Pause() - pause worker
worker.IsRun() - check, that worker status is run
worker.IsStop() - check, that worker status is stop
worker.IsPause() - check, that worker status is pause
in gorutine use defer worker.Stop() - for remove worker from worker manager