zhangqian
2024-12-12 973c3b1684d0d019aa74113b1983fe29f20d2a49
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package cron
 
import (
    "github.com/go-co-op/gocron"
    "model-engine/models"
    "model-engine/pkg/logger"
    "model-engine/pkg/safe"
    "model-engine/service"
    "time"
)
 
var s *gocron.Scheduler
 
func init() {
    s = gocron.NewScheduler(time.Local)
}
 
func Dispatch() {
    tasks, err := service.GetTasks()
    if err != nil {
        panic(err)
    }
    for _, task := range tasks {
        model, err := models.GetModel(task.ModelID)
        if err != nil {
            logger.Errorf("can not find model for id:%v", task.ModelID)
            continue
        }
        task := task
        safe.Go(func() {
            if err := model.Init(task); err != nil {
                return
            }
            if err := model.Run(); err != nil {
                return
            }
            if err := model.Shutdown(); err != nil {
                return
            }
        })
    }
}
 
func Run() (err error) {
    _, err = s.Every(1).Minute().StartImmediately().Do(Dispatch)
    if err != nil {
        return err
    }
 
    s.StartAsync()
    return nil
}