zhangmeng
2020-01-21 9d9cd1d3b93613071d1dffc1c82c4515d2a65af6
main.go
@@ -3,7 +3,13 @@
import (
   "analysis/logo"
   "analysis/util"
   "fmt"
   "os/exec"
   "os/signal"
   "runtime/debug"
   "strconv"
   "syscall"
   "time"
   "analysis/app/master"
   "analysis/app/slave"
@@ -12,8 +18,6 @@
   "flag"
   "os"
   "basic.com/valib/gogpu.git"
   // "net/http"
   // _ "net/http/pprof"
)
@@ -36,25 +40,24 @@
)
func init() {
   flag.StringVar(&role, "role", roleMaster, "run process role master/slave, default single")
   flag.StringVar(&runType, "sdk", util.FeatAll, "run sdk type, face/facedetect/facecompare/yolo,etc.")
   flag.StringVar(&id, "id", util.FakeSdkID, "sdk id as ipc label")
   flag.StringVar(&role, "role", roleMaster, "进程启动方式,master/slave")
   flag.StringVar(&runType, "sdk", util.FeatAll, "进程运行的算法类型FaceDetect/Yolo,etc.slave使用")
   flag.StringVar(&id, "id", util.FakeSdkID, "进程运行算法的ID,slave使用")
   flag.StringVar(&configPath, util.ConfigPath, "", "sdk config file path")
   flag.StringVar(&configPath, util.ConfigPath, "", "进程运行算法的参数配置文件路径,master从路径读取文件,slave使用文件")
   flag.BoolVar(&logit, util.LogIt, false, "use logger,default flase")
   flag.BoolVar(&shm, util.SHM, false, "use shm for performance")
   flag.BoolVar(&logit, util.LogIt, false, "是否保存日志文件,默认false")
   flag.BoolVar(&shm, util.SHM, false, "是否使用shared memory, 默认false, slave使用")
   flag.IntVar(&gpu, util.GPU, -1, "gpu index")
   flag.IntVar(&gpu, util.GPU, -1, "进程运行算法需要的GPU Index")
   // 指定获取配置信息从sqlite,有最高优先级, master使用
   flag.StringVar(&util.FSI.IP, util.FetchSrvIP, util.FSI.IP, "fetch server ip, like camera info")
   flag.IntVar(&util.FSI.HTTPort, util.FetchSrvPort, util.FSI.HTTPort, "fetch server port")
   flag.IntVar(&util.FSI.HBPort, util.FetchSrvHeartbeatPort, util.FSI.HBPort, "fetch server heartbeat port")
   flag.IntVar(&util.FSI.DataPort, util.FetchSrvDataPort, util.FSI.DataPort, "fetch server data port")
   flag.StringVar(&util.FSI.IP, util.FetchSrvIP, util.FSI.IP, "从IP获取需要运行的SDK,master使用")
   flag.IntVar(&util.FSI.HBPort, util.FetchSrvHeartbeatPort, util.FSI.HBPort, "获取需要运行的SDK服务器的心跳 Port,master使用")
   flag.IntVar(&util.FSI.DataPort, util.FetchSrvDataPort, util.FSI.DataPort, "获取需要运行的SDK服务器的数据 Port,master使用")
   // 指定发送到ruleprocess的ipc地址
   flag.StringVar(&util.ToRuleIPC, util.RuleIPC, util.ToRuleIPC, "send data to ruleprocess ipc")
   flag.StringVar(&util.ToRuleIPC, util.RuleIPC, util.ToRuleIPC, "将算法运行结果发送到规则服务器的IPC地址,slave使用")
}
func runLogger() {
@@ -70,10 +73,9 @@
}
func setParamters() {
   util.FillParams(util.FetchSrvIP, util.FSI.IP)
   util.FillParams(util.FetchSrvPort, strconv.Itoa(util.FSI.HTTPort))
   util.FillParams(util.FetchSrvHeartbeatPort, strconv.Itoa(util.FSI.HBPort))
   util.FillParams(util.FetchSrvDataPort, strconv.Itoa(util.FSI.DataPort))
   // util.FillParams(util.FetchSrvIP, util.FSI.IP)
   // util.FillParams(util.FetchSrvHeartbeatPort, strconv.Itoa(util.FSI.HBPort))
   // util.FillParams(util.FetchSrvDataPort, strconv.Itoa(util.FSI.DataPort))
   util.FillParams(util.RuleIPC, util.ToRuleIPC)
@@ -87,12 +89,6 @@
}
func main() {
   indices := gogpu.RankGPU()
   if len(indices) == 0 {
      logo.Errorln("there is no gpu for valid")
      return
   }
   util.InitConfig()
@@ -113,18 +109,20 @@
   ret := false
   if role == roleMaster {
      defer dump(util.LogFile + "_dump_" + time.Now().Format("20060102150405"))
      setParamters()
      ret = master.Run(ctx, configPath)
      ret = master.Run(ctx, "./libcomm.so", configPath)
   } else if role == roleSlave {
      ret = slave.Run(ctx, configPath, runType, id, gpu, shm)
   } else if role == "test" {
      ret = slave.TwoPluginConflict("./libcomm.so", "./zconf/Yolo.json")
   }
   if ret {
      // c := make(chan os.Signal, 1)
      // signal.Notify(c, os.Interrupt, os.Kill, unix.SIGTERM)
      // <-c
      select {}
      c := make(chan os.Signal, 1)
      signal.Notify(c, os.Interrupt, os.Kill, syscall.SIGTERM)
      <-c
   }
   cancel()
@@ -143,3 +141,26 @@
// viper.AddConfigPath("./")
// envString := ""
func dump(dumpFile string) {
   dumpErr := recover()
   if dumpErr == nil {
      return
   }
   f, err := os.Create(dumpFile)
   if err != nil {
      return
   }
   f.WriteString(fmt.Sprintf("panic:\r\n%v", dumpErr))
   f.WriteString("\r\n\nstack:\r\n")
   f.WriteString(string(debug.Stack()))
   f.Close()
   //////////////////////////////////////////////
   // restart master
   cmd := exec.Command(os.Args[0], os.Args[1:]...)
   cmd.Stdout = os.Stdout
   cmd.Stderr = os.Stderr
   cmd.Start()
}