golang 做AI任务执行

1.实现了基于Gin框架的RESTful API服务,用于接收和管理AI任务

2.设计了任务队列系统,支持任务的创建、查询和状态更新

3.提供了后台任务执行器,能够并发处理多种类型的AI任务

4.支持任务状态跟踪,包括待处理、运行中、完成和失败状态

5.使用UUID生成唯一任务ID,确保任务标识的唯一性

6.集成了现代化的Web框架Gin,提供高性能的HTTP服务

7.通过goroutine实现异步任务处理,提高系统并发能力

8.提供了完整的任务生命周期管理,包括创建时间、开始时间和完成时间记录

go 复制代码
//main.go
package main

import (
	"context"
	"encoding/json"
	"fmt"
	"log"
	"net/http"
	"time"

	"github.com/gin-gonic/gin"
	"github.com/google/uuid"
)

type TaskStatus string

const (
	TaskPending   TaskStatus = "pending"
	TaskRunning   TaskStatus = "running"
	TaskCompleted TaskStatus = "completed"
	TaskFailed    TaskStatus = "failed"
)

type Task struct {
	ID          string     `json:"id"`
	Type        string     `json:"type"`
	Status      TaskStatus `json:"status"`
	Payload     string     `json:"payload"`
	Result      string     `json:"result"`
	CreatedAt   time.Time  `json:"created_at"`
	StartedAt   *time.Time `json:"started_at,omitempty"`
	CompletedAt *time.Time `json:"completed_at,omitempty"`
}

type TaskQueue struct {
	tasks map[string]*Task
}

func NewTaskQueue() *TaskQueue {
	return &TaskQueue{
		tasks: make(map[string]*Task),
	}
}

func (tq *TaskQueue) AddTask(taskType, payload string) *Task {
	task := &Task{
		ID:        uuid.New().String(),
		Type:      taskType,
		Status:    TaskPending,
		Payload:   payload,
		CreatedAt: time.Now(),
	}
	tq.tasks[task.ID] = task
	return task
}

func (tq *TaskQueue) GetTask(id string) *Task {
	return tq.tasks[id]
}

func (tq *TaskQueue) GetAllTasks() []*Task {
	tasks := make([]*Task, 0, len(tq.tasks))
	for _, task := range tq.tasks {
		tasks = append(tasks, task)
	}
	return tasks
}

func (tq *TaskQueue) UpdateTaskStatus(id string, status TaskStatus, result string) {
	if task, exists := tq.tasks[id]; exists {
		task.Status = status
		if status == TaskRunning {
			now := time.Now()
			task.StartedAt = &now
		}
		if status == TaskCompleted || status == TaskFailed {
			now := time.Now()
			task.CompletedAt = &now
			task.Result = result
		}
	}
}

type TaskExecutor struct {
	taskQueue *TaskQueue
}

func NewTaskExecutor(taskQueue *TaskQueue) *TaskExecutor {
	return &TaskExecutor{
		taskQueue: taskQueue,
	}
}

func (te *TaskExecutor) ExecuteTask(ctx context.Context, task *Task) {
	// 模拟任务处理
	te.taskQueue.UpdateTaskStatus(task.ID, TaskRunning, "")
	
	// 模拟不同类型的AI任务
	switch task.Type {
	case "image_classification":
		// 模拟图像分类任务
		time.Sleep(2 * time.Second)
		te.taskQueue.UpdateTaskStatus(task.ID, TaskCompleted, "分类结果: 猫科动物 (置信度: 95%)")
	case "text_generation":
		// 模拟文本生成任务
		time.Sleep(3 * time.Second)
		te.taskQueue.UpdateTaskStatus(task.ID, TaskCompleted, "生成文本: 基于输入内容的AI生成文本示例...")
	case "data_analysis":
		// 模拟数据分析任务
		time.Sleep(1 * time.Second)
		te.taskQueue.UpdateTaskStatus(task.ID, TaskCompleted, "分析结果: 数据趋势正常,异常值检测完成")
	default:
		te.taskQueue.UpdateTaskStatus(task.ID, TaskFailed, "未知任务类型")
	}
}

func main() {
	taskQueue := NewTaskQueue()
	taskExecutor := NewTaskExecutor(taskQueue)

	// 启动后台任务处理协程
	go func() {
		for {
			for _, task := range taskQueue.GetAllTasks() {
				if task.Status == TaskPending {
					go taskExecutor.ExecuteTask(context.Background(), task)
				}
			}
			time.Sleep(100 * time.Millisecond)
		}
	}()

	// 初始化Gin路由器
	r := gin.Default()

	// 创建任务端点
	r.POST("/tasks", func(c *gin.Context) {
		var req struct {
			Type    string `json:"type" binding:"required"`
			Payload string `json:"payload"`
		}
		if err := c.ShouldBindJSON(&req); err != nil {
			c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
			return
		}

		task := taskQueue.AddTask(req.Type, req.Payload)
		c.JSON(http.StatusCreated, task)
	})

	// 获取任务状态端点
	r.GET("/tasks/:id", func(c *gin.Context) {
		id := c.Param("id")
		task := taskQueue.GetTask(id)
		if task == nil {
			c.JSON(http.StatusNotFound, gin.H{"error": "任务未找到"})
			return
		}
		c.JSON(http.StatusOK, task)
	})

	// 获取所有任务端点
	r.GET("/tasks", func(c *gin.Context) {
		tasks := taskQueue.GetAllTasks()
		c.JSON(http.StatusOK, tasks)
	})

	// 启动服务器
	fmt.Println("AI任务执行器启动成功,监听端口: 8080")
	log.Fatal(r.Run(":8080"))
}
go 复制代码
//go.mod
module ai-task-executor

go 1.19

require (
	github.com/gin-gonic/gin v1.9.1
	github.com/google/uuid v1.3.0
)

require (
	github.com/bytedance/sonic v1.10.0 // indirect
	github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect
	github.com/gin-contrib/sse v0.1.0 // indirect
	github.com/go-playground/locales v0.14.1 // indirect
	github.com/go-playground/universal-translator v0.18.1 // indirect
	github.com/go-playground/validator/v10 v10.14.0 // indirect
	github.com/goccy/go-json v0.10.2 // indirect
	github.com/json-iterator/go v1.1.12 // indirect
	github.com/klauspost/cpuid/v2 v2.2.5 // indirect
	github.com/leodido/go-urn v1.2.4 // indirect
	github.com/mattn/go-isatty v0.0.19 // indirect
	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
	github.com/modern-go/reflect2 v1.0.2 // indirect
	github.com/pelletier/go-toml/v2 v2.1.0 // indirect
	github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
	github.com/ugorji/go/codec v1.2.11 // indirect
	golang.org/x/arch v0.4.0 // indirect
	golang.org/x/crypto v0.9.0 // indirect
	golang.org/x/net v0.10.0 // indirect
	golang.org/x/sys v0.8.0 // indirect
	golang.org/x/text v0.9.0 // indirect
	google.golang.org/protobuf v1.30.0 // indirect
	gopkg.in/yaml.v3 v3.0.1 // indirect
)
相关推荐
鼎道开发者联盟2 小时前
2025中国AI开源生态报告发布,鼎道智联助力产业高质量发展
人工智能·开源·gui
贾维思基2 小时前
告别RPA和脚本!视觉推理Agent,下一代自动化的暴力解法
人工智能·agent
P-ShineBeam3 小时前
引导式问答-对话式商品搜索-TRACER
人工智能·语言模型·自然语言处理·知识图谱
j_jiajia3 小时前
(一)人工智能算法之监督学习——KNN
人工智能·学习·算法
Hcoco_me3 小时前
大模型面试题62:PD分离
人工智能·深度学习·机器学习·chatgpt·机器人
源代码•宸3 小时前
Golang语法进阶(协程池、反射)
开发语言·经验分享·后端·算法·golang·反射·协程池
OpenCSG3 小时前
AgenticOps 如何重构企业 AI 的全生命周期管理体系
大数据·人工智能·深度学习
阿里云大数据AI技术3 小时前
漫画说:为什么你的“增量计算”越跑越慢?——90%的实时数仓团队都踩过的坑,藏在这几格漫画里
大数据·人工智能
Gavin在路上3 小时前
SpringAIAlibaba之上下文工程与GraphRunnerContext 深度解析(8)
人工智能