package models import "time" type Task struct { ID int `json:"id" gorm:"primary_key"` Name string `json:"name"` Type string `json:"type"` // 任務類型(訓練|推理) Status string `json:"status"` // (initial|ready|waiting|running|success|error) Progress int `json:"progress"` // (0-100) UserID int `json:"user_id"` CreatedAt time.Time `json:"created_at" gorm:"autoCreateTime"` UpdatedAt time.Time `json:"updated_at" gorm:"autoUpdateTime"` } // 异步任务调度管理 type AsynchronousTaskSchedulingManagement struct { tasks map[int]Task // 任务队列 servers map[string]Server // 服务器队列 } // 向任务队列添加任务 func (m *AsynchronousTaskSchedulingManagement) AddTask(task Task) { // 1. 任务加入队列, 任务状态为 waiting, 每次从最后一个任务开始执行, 并向上全取同模型的任务, 任务状态更新为 waiting(排队), 并更新此模型的排队状态到所有关注此模型的用户(管理员每个连接都关注所有模型) // 2. 任务从队列中取出, 任务队列长度超过12则增加机器, 模型类型持续占用机器则增加机器 // 加入任务队列 m.tasks[task.ID] = task // 检查任务队列长度, 持续增长超过12则增加机器 if len(m.tasks) > 12 { var server Server m.servers[server.ID] = server } // 向目标机器发送模型 // 向目标机器切换模型 // 向目标机器发送任务 } //// 推理任務 //func startInferenceTask(task *Task) { // // // 獲取一臺可用的 GPU 資源 // // ... // // // 執行推理任務 // // ... // // // 更新任務狀態 // task.Status = "running" // task.Progress = 0 // task.Update() // // // 監聽任務狀態 // for { // // 延遲 1 秒 // time.Sleep(1 * time.Second) // // // 查詢任務狀態 // resp, err := http.Get("http://localhost:5000/api/v1/tasks/" + strconv.Itoa(task.ID)) // if err != nil { // log.Println(err) // continue // } // defer resp.Body.Close() // // // 解析任務狀態 // // ... // // // 更新任務狀態 // task.Progress = 100 // task.Status = "success" // task.Update() // // // 任務結束判定 // if task.Progress == 100 { // break // } // } // //}