golang 手写实现多台机器执行定时任务
2024-10-20 21:08:29
多台机器,固定间隔每台分别去执行任务。
package main
import (
"fmt"
"strconv"
"time"
)
func main() {
// 周期60 秒, 获取当前秒钟数,
r := 60
interval := 5
// 机器节点数
node := []string{"node-1", "node-2","node-2"}
localIntranetIP := "node-1"
arr := []int{}
for i:=0; i< r; i=i + int( interval) {
arr = append(arr, i)
}
var index int
var setIndex bool
for key, value := range node {
if value == localIntranetIP {
index = key
setIndex = true
break
}
}
if !setIndex {
fmt.Println("no set index !")
return
}
l := len(node)
m := make([][]int, l)
for key, value := range arr {
s := key % l
m[s] = append(m[s], value)
}
var selfTimer = []int{}
if len(m) >= index + 1 {
selfTimer = m[index]
}
fmt.Println(m)
fmt.Println(selfTimer)
// 初始 200毫秒
timer := time. NewTimer( 200*time.Millisecond)
defer timer.Stop()
var lastTime int
selfTimerLen := len(selfTimer)
for {
select {
case <- timer.C:
timer.Reset( 200*time.Millisecond)
secTime := nowTimeSec()
for key, _ := range selfTimer {
// 数组末尾值
if key == selfTimerLen - 1 && lastTime != selfTimer[key] && secTime > selfTimer[key] {
lastTime = selfTimer[key]
doWork()
} else if key < selfTimerLen - 1 && selfTimer[key] < secTime && secTime <= selfTimer[key + 1 ] && lastTime != selfTimer[key] {
lastTime = selfTimer[key]
doWork()
}
}
}
}
}
func nowTimeSec() int {
secStr := time.Now().Format("05")
secInt, _ := strconv.Atoi(secStr)
return secInt
}
func doWork() {
fmt.Println("do work !", time.Now().Format("2006-01-02 15:04:05"))
}
最新文章
- 大理石在哪里UVa 10474
- NoSql之旅--Cassandra的Cql简介(二)
- wp插件
- C#验证是否是真的图片格式
- Python3基础 for循环 遍历并输出一个字符串的列表
- C7 连接电脑问题解决
- Hadoop2安装
- 彻底理解Gradle的任务
- 硝烟中的Scrum和XP-我们如何实施Scrum 15)多团队 Part 2/2 16)地理分散 17)检查列表 18)其他
- OpenCart 之registry功用
- python变量不能以数字打头
- concurrent.futures
- python3之面向对象
- Jenkins通过Publish over SSH插件实现远程部署
- ORACLE数据库管理员的职责
- TFT2.2
- C语言goto语句的使用
- Quartz中时间表达式的设置-----corn表达式 (转)
- 跟我学SharePoint 2013视频培训课程——删除恢复、文档离线工作(11)
- Activity 经历如下3个阶段
热门文章
- ng-alain全局配置NzMessageService
- 商城网站商品sku选择的js简易实现
- Map接口中的常用方法-Map集合遍历建找值方式
- 一小时学会微信小程序
- 各种排序算法实现(JAVA)
- 普冉PY32系列(五) 使用JLink RTT代替串口输出日志
- SpringBoot 2.x 在Tomcat8上无法运行,报无法访问错误
- MRS+LakeFormation:打造一站式湖仓,释放数据价值
- centos7 在线或离线安装python3
- window.alert和console.log()