Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

13 лет назад
10 лет назад
13 лет назад
10 лет назад
13 лет назад
10 лет назад
13 лет назад
10 лет назад
10 лет назад
10 лет назад
10 лет назад
10 лет назад
13 лет назад
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package main
  2. import (
  3. "github.com/mikespook/gearman-go/worker"
  4. "github.com/mikespook/golib/signal"
  5. "log"
  6. "os"
  7. "strings"
  8. "time"
  9. )
  10. func ToUpper(job worker.Job) ([]byte, error) {
  11. log.Printf("ToUpper: Data=[%s]\n", job.Data())
  12. data := []byte(strings.ToUpper(string(job.Data())))
  13. return data, nil
  14. }
  15. func ToUpperDelay10(job worker.Job) ([]byte, error) {
  16. log.Printf("ToUpper: Data=[%s]\n", job.Data())
  17. time.Sleep(10 * time.Second)
  18. data := []byte(strings.ToUpper(string(job.Data())))
  19. return data, nil
  20. }
  21. func main() {
  22. log.Println("Starting ...")
  23. defer log.Println("Shutdown complete!")
  24. w := worker.New(worker.Unlimited)
  25. defer w.Close()
  26. w.ErrorHandler = func(e error) {
  27. log.Println(e)
  28. if e == worker.ErrLostConn {
  29. proc, err := os.FindProcess(os.Getpid())
  30. if err != nil {
  31. log.Println(err)
  32. }
  33. if err := proc.Signal(os.Interrupt); err != nil {
  34. log.Println(err)
  35. }
  36. }
  37. }
  38. w.JobHandler = func(job worker.Job) error {
  39. log.Printf("Data=%s\n", job.Data())
  40. return nil
  41. }
  42. w.AddServer("tcp4", "127.0.0.1:4730")
  43. w.AddFunc("ToUpper", ToUpper, worker.Immediately)
  44. w.AddFunc("ToUpperTimeOut5", ToUpperDelay10, 5)
  45. w.AddFunc("ToUpperTimeOut20", ToUpperDelay10, 20)
  46. w.AddFunc("SysInfo", worker.SysInfo, worker.Immediately)
  47. w.AddFunc("MemInfo", worker.MemInfo, worker.Immediately)
  48. if err := w.Ready(); err != nil {
  49. log.Fatal(err)
  50. return
  51. }
  52. go w.Work()
  53. sh := signal.NewHandler()
  54. sh.Bind(os.Interrupt, func() bool { return true })
  55. sh.Loop()
  56. }