怎么用go快速实现一个极简任务调度系统?
网友回复
任务调度(Task Scheduling)是很多软件系统中的重要组成部分,字面上的意思是按照一定要求分配运行一些通常时间较长的脚本或程序。在爬虫管理平台 Crawlab[1] 中,任务调度是其中的核心模块,相信不少朋友会好奇如何编写一个任务调度系统。本篇文章会教读者用 Go 语言编写一个非常简单的任务调度系统。
思路
我们首先理清一下思路,开发最小化任务调度器需要什么。交互界面(API)
定时任务(Cron)任务执行(Execute Tasks)
整个流程如下:
实战
交互界面
首先我们来搭个架子。在项目目录下创建一个 main.go 文件,并输入以下内容。其中 gin 是非常流行的 Go 语言 API 引擎。package main import ( "fmt" "github.com/gin-gonic/gin" "os" ) func main() { // api engine app := gin.New() // api routes app.GET("/jobs", GetJobs) app.POST("/jobs", AddJob) app.DELETE("/jobs", DeleteJob) // run api on port 9092 if err := app.Run(":9092"); err != nil { _, err = fmt.Fprintln(os.Stderr, err) os.Exit(1) } }然后添加 api.go 文件,输入以下内容,注意,这里没有任何代码实现,只是加入了占位区域。
package main import "github.com/gin-gonic/gin" func GetJobs(c *gin.Context) { // TODO: implementation here } func AddJob(c *gin.Context) { // TODO: implementation here } func DeleteJob(c *gin.Context) { // TODO: implementation here }
定时任务
然后是任务调度的核心,定时任务。这里我们使用 robfig/cron[2],Go 语言比较流行的定时任务库。 现在创建 cron.go 文件,输入以下内容。其中 Cron 就是 robfig/cron 库中的 Cron 类生成的实例。package main import "github.com/robfig/cron" func init() { // start to run Cron.Run() } // Cron create a new cron.Cron instance var Cron = cron.New()现在创建好了主要定时任务实例,就可以将核心逻辑添加在刚才的 API 占位区域了。 同样是 api.go ,将核心代码添加进来。
package main import ( "github.com/gin-gonic/gin" "github.com/robfig/cron/v3" "net/http" "strconv" ) func GetJobs(c *gin.Context) { // return a list of cron job entries var results []map[string]interfa...
点击查看剩余70%
threejs如何引入中文字体json?
FLUX.1 Kontext如何api调用?
腾讯混元模型广场里都是混元模型的垂直小模型,如何api调用?
为啥所有的照片分辨率提升工具都会修改照片上的图案细节?
js如何在浏览器中将webm视频的声音分离为单独音频?
微信小程序如何播放第三方域名url的mp4视频?
ai多模态大模型能实时识别视频中的手语为文字吗?
如何远程调试别人的chrome浏览器获取调试信息?
为啥js打开新网页window.open设置窗口宽高无效?
浏览器中js的navigator.mediaDevices.getDisplayMedia屏幕录像无法录制SpeechSynthesisUtterance产生的说话声音?