@@ -14,46 +14,70 @@ import (
1414
1515func main () {
1616 inputVideo := os .Args [1 ]
17+ mode := "queue" // 默认队列容器
18+ if len (os .Args ) > 2 {
19+ mode = os .Args [2 ] // 任务容器模式
20+ }
21+
1722 go videocut .StartServer () // start video cut microservice
1823
1924 // 构建队列容器,队列长度 10000
20- container := memeorycontainer .MakeQueueContainer (10000 , 100 * time .Millisecond )
25+ var container lighttaskscheduler.TaskContainer
26+ var scanInterval time.Duration // 调度器扫描间隔时间
27+ if mode == "queue" {
28+ save := func (ctx context.Context , ftask * lighttaskscheduler.Task , data interface {}) error {
29+ log .Printf ("save task %s: output_video = %s \n " , ftask .TaskId , data .(string ))
30+ return nil
31+ } // 处理结果的回调函数
32+ container = memeorycontainer .MakeQueueContainer (10000 , 100 * time .Millisecond , save )
33+ scanInterval = 50 * time .Millisecond
34+ } else if mode == "sql" {
35+ var err error
36+ container , err = videocut .MakeVideoCutSqlContainer ("127.0.0.1" , "3306" , "root" , "Zgh123456789." , "test" )
37+ if err != nil {
38+ log .Fatalf ("build container failed: %v\n " , err )
39+ }
40+ scanInterval = 2 * time .Second
41+ }
42+
2143 // 构建裁剪任务执行器
2244 actuator := videocut .MakeVideoCutActuator ()
2345 sch := lighttaskscheduler .MakeNewScheduler (
2446 context .Background (),
2547 container , actuator ,
2648 lighttaskscheduler.Config {
27- TaskLimit : 2 , // 2 并发
28- ScanInterval : 50 * time .Millisecond ,
29- TaskTimeout : 20 * time .Second , // 20s 超时时间
49+ TaskLimit : 2 , // 2 并发
50+ ScanInterval : scanInterval ,
51+ TaskTimeout : 20 * time .Second , // 20s 超时时间
52+ EnableFinshedTaskList : true , // 开启已完成任务返回功能
3053 },
3154 )
3255
3356 // 添加任务,把视频裁前 100s 剪成 10s 一个的视频
34- var c chan os.Signal
3557 for i := 0 ; i < 100 ; i += 10 {
36- select {
37- case <- c :
38- return
39- default :
40- if err := sch .AddTask (context .Background (),
41- lighttaskscheduler.Task {
42- TaskId : strconv .Itoa (i ), // 这里的任务 ID 是为了调度框架方便标识唯一任务的ID, 和微服务的任务ID不同,是映射关系
43- TaskItem : videocut.VideoCutTask {
44- InputVideo : inputVideo ,
45- CutStartTime : float32 (i ),
46- CutEndTime : float32 (i + 10 ),
47- },
48- }); err != nil {
49- log .Printf ("add task TaskId %s failed: %v\n " , strconv .Itoa (i ), err )
50- }
58+ // 这里的任务 ID 是为了调度框架方便标识唯一任务的ID, 和微服务的任务ID不同,是映射关系
59+ taskId := "task-" + videocut .GenerateRandomString (8 )
60+ if err := sch .AddTask (context .Background (),
61+ lighttaskscheduler.Task {
62+ TaskId : taskId ,
63+ TaskItem : videocut.VideoCutTask {
64+ TaskId : taskId ,
65+ InputVideo : inputVideo ,
66+ CutStartTime : float32 (i ),
67+ CutEndTime : float32 (i + 10 ),
68+ },
69+ }); err != nil {
70+ log .Printf ("add task TaskId %s failed: %v\n " , strconv .Itoa (i ), err )
5171 }
5272 }
5373
54- for range c {
55- log .Println ("stop Scheduling" )
56- sch .Close ()
57- return
74+ for task := range sch .FinshedTasks () {
75+ if task .TaskStatus == lighttaskscheduler .TASK_STATUS_FAILED {
76+ log .Printf ("failed task %s, reason: %s, timecost: %dms\n " ,
77+ task .TaskId , task .FailedReason , task .TaskEnbTime .Sub (task .TaskStartTime ).Milliseconds ())
78+ } else if task .TaskStatus == lighttaskscheduler .TASK_STATUS_SUCCESS {
79+ log .Printf ("success task %s, timecost: %dms\n " , task .TaskId ,
80+ task .TaskEnbTime .Sub (task .TaskStartTime ).Milliseconds ())
81+ }
5882 }
5983}
0 commit comments