Skip to content

Commit 8ecc454

Browse files
author
willzhen
committed
Asjust framework
1 parent 7c86866 commit 8ecc454

File tree

6 files changed

+658
-65
lines changed

6 files changed

+658
-65
lines changed

example/videocut_example/main.go

Lines changed: 48 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -14,46 +14,70 @@ import (
1414

1515
func 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

Comments
 (0)