golang cronexpr定时任务包使用
包获取
go get -u github.com/gorhill/cronexpr
创建一个定时任务
expr, err = cron.Parse("* * * * *");
获得任务的下次执行时间
nextTime = expr.Next(now)
package main import (
"fmt"
"time"
cron "github.com/gorhill/cronexpr"
) type CronJob struct {
expr *cron.Expression
nextTime time.Time //expr.now
} func main() { var (
cronJob *CronJob
expr *cron.Expression
now time.Time
scheduleTable map[string]*CronJob // key 任务的名称
) scheduleTable = make(map[string]*CronJob) now = time.Now()
expr = cron.MustParse("*/5 * * * * * *") cronJob = &CronJob{
expr: expr,
nextTime: expr.Next(now),
} scheduleTable["job1"] = cronJob expr = cron.MustParse("*/10 * * * * * *") cronJob = &CronJob{
expr: expr,
nextTime: expr.Next(now),
} // 将任务注册到调度表中 scheduleTable["job2"] = cronJob // 调度协程
go func() {
var(
_now time.Time
cname string
cronjob *CronJob
) for {
_now = time.Now()
for cname, cronjob = range scheduleTable {
if cronjob.nextTime.Before(_now) || cronjob.nextTime.Equal(_now) {
go func(name string) {
fmt.Println("exec", name)
}(cname) cronjob.nextTime = cronjob.expr.Next(_now)
fmt.Println("next exec time: ",cronjob.nextTime)
}
} select {
case <-time.NewTimer(100 * time.Millisecond).C: //睡眠
}
}
}() time.Sleep(time.Minute*3)
}
golang cronexpr定时任务包使用的更多相关文章
- golang的定时任务
golang的定时任务使用的是cron这个包来解决的 官方文档地址:https://godoc.org/github.com/robfig/cron cron包的基础知识 字段名 是否必须 允许的值 ...
- Golang爬虫示例包系列教程(一):pedaily.com投资界爬虫
Golang爬虫示例包 文件结构 自己用Golang原生包封装了一个爬虫库,源码见go get -u -v github.com/hunterhug/go_tool/spider ---- data ...
- 一键解决 go get golang.org/x 包失败
问题描述 当我们使用 go get.go install.go mod 等命令时,会自动下载相应的包或依赖包.但由于众所周知的原因,类似于 golang.org/x/... 的包会出现下载失败的情况. ...
- 19-03【golang】strings包
golang的strings包提供了字符串操作的一系列函数.下面做个简单介绍 函数 用法 备注 Compare(a,b sring) 比较两个字符串 Contains(s, substr stri ...
- 关于golang.org/x包问题
关于golang.org/x包问题 由于谷歌被墙,跟谷歌相关的模块无法通过go get来下载,解决方法: git clone https://github.com/golang/net.git $GO ...
- Golang Gin 项目包依赖管理 godep 使用
Golang Gin 项目包依赖管理 godep 使用 标签(空格分隔): Go 在按照github.com/tools/godep文档go get完包以后,调整项目结构为$GOPATH/src/$P ...
- golang 关于golang.org/x包问题
关于golang.org/x包问题 由于谷歌被墙,跟谷歌相关的模块无法通过go get来下载,解决方法: git clone https://github.com/golang/net.git $GO ...
- Golang的json包
encoding/json encoding/json是官方提供的标准json, 实现RFC 7159中定义的JSON编码和解码.使用的时候需要预定义struct,原理是通过reflection和in ...
- Golang官方log包详解
Golang官方log包详解 以下全是代码, 详解在注释中, 请从头到尾看 // Copyright 2009 The Go Authors. All rights reserved. // Use ...
随机推荐
- HBase 清空表数据
public int clearTableByTableName(String tableName) throws Exception { logger.debug("======InitH ...
- 前后端分离之vue2.0+webpack2 实战项目 -- html模板拼接
对于前后端分离,如何把一个页面的公共部分比如head, header, footer, content等组合成一个完整的html 是一个值得考虑的地方. 对于php,我们可以利用include加载其他 ...
- SSM 即所谓的 Spring MVC + Spring + MyBatis 整合开发。
SSM 即所谓的 Spring MVC + Spring + MyBatis 整合开发.是目前企业开发比较流行的架构.代替了之前的SSH(Struts + Spring + Hibernate) 计划 ...
- 【BZOJ1188】分裂游戏(博弈论)
[BZOJ1188]分裂游戏(博弈论) 题面 BZOJ 洛谷 题解 这道题目比较神仙. 首先观察结束状态,即\(P\)状态,此时必定是所有的豆子都在最后一个瓶子中. 发现每次的转移一定是拿出一棵豆子, ...
- Codeforces | CF1029C 【Maximal Intersection】
论Div3出这样巨水的送分题竟然还没多少人AC(虽说当时我也没A...其实我A了D...逃) 这个题其实一点都不麻烦,排序都可以免掉(如果用\(priority \_ queue\)的话) 先考虑不删 ...
- SNMP扫描
------------------------------------------------------------------grub引导密码:[root@localhost ~]# jm4pt ...
- Jupyter Notebook添加Ruby支持
安装步骤 gem install iruby iruby register --force 参考资料:http://devopspy.com/linux/ruby-kernel-jupyter-not ...
- CSS解决文字超出显示省略号问题
超出一行 white-space: nowrap; overflow: hidden; text-overflow: ellipsis; 超出多行 overflow: hidden; text-ove ...
- BUG描述规范管理
BUG:软件系统中存在的可能导致系统出错.失效.死机等问题的错误或缺陷. 描述一个缺陷,需要以下核心要素 标题:用简洁的话描述该缺陷,主要让开发知道这是一个什么样的缺陷 参数设置:Bug的类型(功能/ ...
- 第七节,TensorFlow编程基础案例-TensorBoard以及常用函数、共享变量、图操作(下)
这一节主要来介绍TesorFlow的可视化工具TensorBoard,以及TensorFlow基础类型定义.函数操作,后面又介绍到了共享变量和图操作. 一 TesnorBoard可视化操作 Tenso ...