You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

пре 13 година
пре 10 година
пре 10 година
пре 13 година
пре 10 година
пре 13 година
пре 10 година
пре 10 година
пре 13 година
пре 10 година
пре 10 година
пре 10 година
пре 10 година
пре 10 година
пре 10 година
пре 10 година
пре 10 година
пре 13 година
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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. "net"
  10. )
  11. func ToUpper(job worker.Job) ([]byte, error) {
  12. log.Printf("ToUpper: Data=[%s]\n", job.Data())
  13. data := []byte(strings.ToUpper(string(job.Data())))
  14. return data, nil
  15. }
  16. func ToUpperDelay10(job worker.Job) ([]byte, error) {
  17. log.Printf("ToUpper: Data=[%s]\n", job.Data())
  18. time.Sleep(10 * time.Second)
  19. data := []byte(strings.ToUpper(string(job.Data())))
  20. return data, nil
  21. }
  22. func Foobar(job worker.Job) ([]byte, error) {
  23. log.Printf("Foobar: Data=[%s]\n", job.Data())
  24. for i := 0; i < 10; i++ {
  25. job.SendWarning([]byte{byte(i)})
  26. job.SendData([]byte{byte(i)})
  27. job.UpdateStatus(i+1, 100)
  28. }
  29. return job.Data(), nil
  30. }
  31. func main() {
  32. log.Println("Starting ...")
  33. defer log.Println("Shutdown complete!")
  34. w := worker.New(worker.Unlimited)
  35. defer w.Close()
  36. w.ErrorHandler = func(e error) {
  37. log.Println(e)
  38. if opErr, ok := e.(*net.OpError); ok {
  39. if ! opErr.Temporary() {
  40. proc, err := os.FindProcess(os.Getpid())
  41. if err != nil {
  42. log.Println(err)
  43. }
  44. if err := proc.Signal(os.Interrupt); err != nil {
  45. log.Println(err)
  46. }
  47. }
  48. }
  49. }
  50. w.JobHandler = func(job worker.Job) error {
  51. log.Printf("Data=%s\n", job.Data())
  52. return nil
  53. }
  54. w.AddServer("tcp4", "127.0.0.1:4730")
  55. w.AddFunc("Foobar", Foobar, worker.Unlimited)
  56. w.AddFunc("ToUpper", ToUpper, worker.Unlimited)
  57. w.AddFunc("ToUpperTimeOut5", ToUpperDelay10, 5)
  58. w.AddFunc("ToUpperTimeOut20", ToUpperDelay10, 20)
  59. w.AddFunc("SysInfo", worker.SysInfo, worker.Unlimited)
  60. w.AddFunc("MemInfo", worker.MemInfo, worker.Unlimited)
  61. if err := w.Ready(); err != nil {
  62. log.Fatal(err)
  63. return
  64. }
  65. go w.Work()
  66. sh := signal.NewHandler()
  67. sh.Bind(os.Interrupt, func() bool { return true })
  68. sh.Loop()
  69. }