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
)
相关推荐
Restart-AHTCM1 分钟前
AI 时代的大前端崛起,TypeScript 重塑前端开发
前端·人工智能·typescript·ai编程·a
海参崴-3 分钟前
C++ STL篇 AVL树的模拟实现
开发语言·c++
无心水7 分钟前
【Hermes:多平台接入】15、Telegram Bot 接入:手机随时叫 AI 助手(最推荐) —— 把 Honcho 智能体装进口袋
人工智能·openclaw·养龙虾·hermes agent·hermes·养马
Cyber4K11 分钟前
【Python专项】基础语法(2)
开发语言·python
乐迪信息13 分钟前
乐迪信息:实时预警,秒级响应:船舶AI异常行为检测算法
大数据·人工智能·算法·安全·目标跟踪
用AI赚一点13 分钟前
AI落地不是造大模型:从概念到落地的核心差异
人工智能·深度学习·机器学习
littleM15 分钟前
深度拆解 HermesAgent(五):记忆系统与用户建模
jvm·人工智能·架构·ai编程
红色星际16 分钟前
进军具身机器人和Robotaxi的智驾公司
大数据·人工智能·机器人
Bruce_Liuxiaowei16 分钟前
《轻量化制播系统技术应用指南(2026版)》解读:县级融媒体的“减负增效“新路径
大数据·人工智能·媒体
某人辛木17 分钟前
JDK安装配置
java·开发语言