热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

golang定时器问题

自己写了一个定时采集的模块代码如下图conf.Time=3600(一小时)

自己写了一个定时采集的模块
代码如下图
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执行了 但是两个小时候没有再次执行?


   



推荐阅读
author-avatar
风雨无痕630_748
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有