Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

pirms 10 gadiem
pirms 10 gadiem
pirms 10 gadiem
pirms 10 gadiem
pirms 10 gadiem
pirms 10 gadiem
pirms 10 gadiem
pirms 10 gadiem
pirms 10 gadiem
pirms 10 gadiem
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. }