Go语言使用cron/v3实现定时任务

一、获取cron/v3包

go get github.com/robfig/cron/v3@v3.0.0

安装v3版本的cron包。

二、创建cron调度器

使用cron.New()创建一个新的Cron调度器:

c := cron.New()

三、添加定时任务

使用AddFunc方法添加定时任务,参数是cron表达式和任务函数:

c.AddFunc("* * * * *", task)

四、启动调度器

使用Start方法启动cron调度器,开始执行定时任务:

c.Start()

也可以使用Run方法,它会在后台启动goroutine运行调度器:

c.Run()

cron.Start()cron.Run() 是cron/v3库中启动定时任务调度的两个主要方法,它们的区别是:

  1. cron.Start() 直接启动调度,当前goroutine继续执行。如果当前goroutine退出,定时任务也会停止。

  2. cron.Run() 内部会启动一个新的goroutine来调用Start方法,可以确保调度持续运行,当前goroutine可以继续做其他工作。

一个例子:

c := cron.New()
c.AddFunc("* * * * *", task)c.Start()
// 当前goroutine退出时,定时任务也会退出c.Run() 
// 新goroutine会持续运行定时任务,当前goroutine继续执行

所以,如果需要定时任务持续运行,通常推荐使用cron.Run()方法。

另外,可以通过cron.Stop()来停止一个调度器。

总结区别:

  • cron.Start():当前goroutine控制定时任务
  • cron.Run():新goroutine运行定时任务,当前goroutine不受影响

日常使用中,cron.Run()配合cron.Stop()可以方便控制定时任务的生命周期。

五、cron表达式格式

cron表达式共5个字段,格式为:

* * * * *
- - - - - 
| | | | |
| | | | ----- 星期 - 0-6(0表示星期天)  
| | | ------- 月 - 1-12
| | --------- 日 - 1-31
| ----------- 小时 - 0-23
------------- 分钟 - 0-59

例如*/5 * * * *表示每5分钟执行一次。

六、设置时区

可以在创建调度器时指定时区:

loc, _ := time.LoadLocation("Asia/Shanghai")
c := cron.New(cron.WithLocation(loc)) 

也可以为每个任务设置时区:

c.AddFunc("@hourly", task, cron.WithLocation(loc))

在cron表达式中设置:

CRON_TZ=Asia/Tokyo * * * * *

七、停止调度器

使用Stop方法可以停止调度器:

c.Stop() 

以上汇总了使用cron/v3实现Go语言定时任务的相关内容,包括包引用、调度器创建、任务添加、表达式格式、时区设置等,可以提供参考。

//0周日 1周一 2周二 3周三 4周四 5周五 6周六
c := cron.New(cron.WithLocation(loc))
c.AddFunc("33 9 ? * 5", func() {// 打印当前时间fmt.Println(time.Now().Format("2006-01-02 15:04:05"))
})
c.AddFunc("34 9 ? * 5", func() {// 打印当前时间fmt.Println(time.Now().Format("2006-01-02 15:04:05"))
})
c.Run()

更多内容参考:https://github.com/robfig/cron

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/32752.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SaaS系统相比传统软件,为何数据更安全?

随着云计算、5G等技术的不断进步,SaaS行业步入了快速发展的阶段,应用场景也日趋多元化。预计2023年底,中国SaaS行业市场规模将达到555.1亿元。 中研网对于SaaS发展态势预测这样评价: 当前,我国在多个维度上具备发展 S…

RabbitMQ的安装-centos环境

1.定义 RabbitMQ是一个消息中间件:它接受并转发消息。你可以把它当做一个快递站点,当你要发送一个包裹时,你把你的包裹放到快递站,快递员最终会把你的快递送到收件人那里,按照这种逻辑RabbitMQ是一个快递站,一个快递员…

【力扣每日一题】2023.8.11 矩阵对角线元素的和

目录 题目: 示例: 分析: 代码: 题目: 示例: 分析: 题目给我们一个矩阵,让我们把矩阵对角线上的元素都加起来返回。 那么矩阵的对角线是有两条的,一条是从左上到右下…

python解决8皇后问题

def is_valid(queens, row, col):for i in range(row):if queens[i] == col or abs(queens[i] - col) == abs(i - row):return Falsereturn Truedef solve_n_queens(n, row, queens, result):if row == n:result.append(queens[:]) # 将当前解添加到结果中returnfor col in ra…

html 计算器界面

其他链接&#xff1a; https://www.freecodecamp.org/news/how-to-build-an-html-calculator-app-from-scratch-using-javascript-4454b8714b98/ https://codepen.io/pen/tour/welcome/start 下面展示一些 内联代码片。 <!DOCTYPE html> <html lang"en">…

npm常用命令

npm -v&#xff1a;查看 npm 版本 npm init&#xff1a;初始化后会出现一个 Package.json 配置文件&#xff0c;可以在后面加上 -y&#xff0c;快速跳到问答界面 npm install&#xff1a;会根据项目中的 package.json 文件自动给下载项目中所需的全部依赖 npm insall 包含 -…

linux4.0新增32位ARM的系统调用

修改内核源码 Linux系统为每一个系统调用赋予一个系统调用号。当应用程序执行一个系统调用时&#xff0c;应用程序就可以知道执行和调用到哪个系统调用了&#xff0c;从而不会造成混乱。系统调用号一旦分配之后就不会有任何变更&#xff0c;否则已经编译好的应用程序就不能运行…

Unity游戏源码分享-精品即时战略游戏_官网60美刀素材

Unity游戏源码分享-精品即时战略游戏_官网60美刀素材 下载地址&#xff1a;https://download.csdn.net/download/Highning0007/88204017

chrome V3 插件开发 基础

目录 准备popup通信popup 发消息给 backgroundpopup 发消息给 content长期连接 如何页面上添加一个按钮&#xff1f;tabs.onUpdatedcontent-script.jsinject.js 右键菜单chrome.contextMenus举个例子添加关于报错&#xff08;cannot create item with duplicate id XXX&#xf…

elementUi select下拉框触底加载异步分页数据

在Element UI中&#xff0c;可以通过监听select下拉框的visible-change事件来实现触底加载下一页的效果。 方式一&#xff1a;利用elementUi的事件 具体步骤如下&#xff1a; 首先&#xff0c;在select组件中设置&#xff1a;visible-change"handleVisibleChange"…

react-media如何使用

介绍 react-media 是 React 中用于响应式设计的一个很好的库。它可以用于在视口宽度满足特定条件时渲染组件。 主要功能包括: 媒体查询:通过 minWidth, maxWidth 和 width 等设置媒体查询条件。 渲染组件:当媒体查询条件匹配时渲染子组件。 默认样式:可以设置默认渲染的组件。…

Shell 教程

Shell 教程 Shell 是一个用 C 语言编写的程序&#xff0c;它是用户使用 Linux 的桥梁。Shell 既是一种命令语言&#xff0c;又是一种程序设计语言。 Shell 是指一种应用程序&#xff0c;这个应用程序提供了一个界面&#xff0c;用户通过这个界面访问操作系统内核的服务。 Ke…

大语言模型 GPT历史简介

得益于数据、模型结构以及并行算力的发展&#xff0c;大语言模型应用现今呈井喷式发展态势&#xff0c;大语言神经网络模型成为了不可忽视的一项技术。 GPT在自然语言处理NLP任务上取得了突破性的进展&#xff0c;扩散模型已经拥有了成为下一代图像生成模型的代表的潜力&#x…

vue-pdf实现pdf文件在线预览

在日常的工作中在线预览 PDF 文件的需求是很多的&#xff0c;下面介绍一下使用 vue-pdf 实现pdf文件在线预览 使用 npm 安装 vue-pdf npm install vue-pdf 使用 vue-pdf 显示 PDF 文件 <template><div><pdf :src"url"></pdf></div>…

uniapp之当你问起“tab方法触发时eventchange也跟着触发了咋办”时

我相信没有大佬会在这个问题上卡两个小时吧&#xff0c;记下来大家就当看个乐子了。 当时问题就是&#xff0c;点击tab头切换的时候&#xff0c;作为tab滑动事件的eventchange同时触发了&#xff0c;使得接口请求了两次 大概是没睡好&#xff0c;我当时脑子老想着怎么阻止它冒…

【从零开始学习JAVA | 第四十五篇】反射

目录 前言&#xff1a; ​反射&#xff1a; 使用反射的步骤&#xff1a; 1.获取阶段&#xff1a; 2.使用阶段&#xff1a; 反射的应用场景&#xff1a; 使用反射的优缺点&#xff1a; 总结&#xff1a; 前言&#xff1a; Java中的反射是一项强大而灵活的功能&#xff0…

Leetcode.2789 合并后数组中的最大元素

题目链接 Leetcode.2789 合并后数组中的最大元素 rating : 1485 题目描述 给你一个下标从 0 0 0 开始、由正整数组成的数组 n u m s nums nums 。 你可以在数组上执行下述操作 任意 次&#xff1a; 选中一个同时满足 0 ≤ i < n u m s . l e n g t h − 1 0 \leq i &l…

Android Framework工具——EA画图

EA 是一个著名的企业架构(Enterprise Architecture)工具,用于绘制和管理企业的架构图和过程模型。该工具提供了多种功能,包括建立业务流程图、数据流图、组织结构图、应用架构图等。EA工具可帮助企业进行战略规划、业务流程改进和系统开发等活动。 一、用例图 1、创建项目…

SAP从入门到放弃系列之BOM组-Part1

目录 BOM组两种模式&#xff1a; 创建BOM的方式 方式一&#xff1a;直接在每个工厂分别创建BOM。 方式二&#xff1a;创建BOM组&#xff0c;然后每个工厂参考创建 方式三&#xff1a;创建BOM组&#xff0c;每个工厂参考创建&#xff0c;针对有特殊的工厂复制BOM组后进行调…

Hadoop Hbase Hive 版本对照一览

这里写目录标题 一、Hadoop 与 Hbase 版本对照二、Hadoop 与 Hive 版本对照 官网内容记录&#xff0c;仅供参考 一、Hadoop 与 Hbase 版本对照 二、Hadoop 与 Hive 版本对照