作者:风雨无痕630_748 | 来源:互联网 | 2023-10-10 16:21
自己写了一个定时采集的模块
代码如下图
conf.Time = 3600 (一小时)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| func newTicker(conf model.WebsiteConfig) {
tick := time.NewTicker(time.Second * time.Duration(conf.Time))
status := make(chan bool)
ticker := &model.Ticker{
Tick: tick,
Status: status,
Config: conf,
Off: false,
}
// 检测是否存在相同采集列表的进程
exsit := false
for k, v := range tickers {
// 检查该采集id是否存在 若存在先关掉当前任务重新创建
if v.Config.CollectId == conf.CollectId {
// 检查该ticker是否已经关闭状态
if !v.Off { // 如果没有关闭 则先关闭掉
// 停止计时器
v.Tick.Stop()
// 跳出协程
v.Status <- false
}
// 当执行v.Status <- false时,该ticker的任务进程已经退出
// 这时将新的配置覆盖已经关闭的配置
tickers[k] = ticker
exsit = true
break
}
}
fmt.Println("HERE")
// 若配置信息不存在则添加进任务中心
if !exsit {
// 将新定时器加入定时器集合
fmt.Println("HERE1")
tickers = append(tickers, ticker)
}
// 每次更新或开启配置都先执行一次采集
go Co.Start(ticker.Config)
fmt.Println("HERE2")
// 然后加入定时任务
go func() {
running := true
for {
select {
case <-ticker.Tick.C:
// 执行采集 !!!!!!!!!!!!!!!!!!!!为什么这个ticker.Tick.C就执行了一次?
Co.Start(ticker.Config)
case s := <-ticker.Status:
// 接收关闭状态
running = s
}
if !running {
break
}
}
}()
} |
为什么ticker.Tick.C只执行了一次? 也就是到一个小时的时候Co.Start执行了 但是两个小时候没有再次执行?