V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
Miller5991
V2EX  ›  Go 编程语言

给定时任务包 robig/cron 写了一个 @interval feature,支持同一定时任务只有一个在跑

  •  
  •   Miller5991 · 2019-08-10 23:41:56 +08:00 · 2543 次点击
    这是一个创建于 1957 天前的主题,其中的信息可能已经有所发展或是发生改变。

    项目地址: https://github.com/LampScript/cron

    一句话说明白:添加了 @interval 前缀用来执行定时任务,每个任务交替进行,不会因为某几次任务执行时间过长导致多个任务同时执行。

    • 背景。在公司做项目的时候用到这个包写定时任务,考虑到单次任务在数据量大的时候执行速度慢,上一个没执行完下个任务又开始跑了,数据高峰时期可能会有问题,看下源代码是每次任务都一个协程单独跑,所以可能会有问题。

    • 思考。读完源代码后思考了一下感觉实现起来并不会太难,每个任务作者封装在一个实体数组中的,并且按下次执行时间从早到晚排序,支持运行时插入。

    • 动手。考虑到任务执行时间不可预测,每次执行 @interval 执行时将此任务剔除所有定时任务列表,并且执行完成后再添加回去,并且排序。

    最后。pr 已经提给原作者。

    第一次给开源项目贡献代码,求夸夸。

    2 条回复    2019-08-11 11:21:05 +08:00
    Takamine
        1
    Takamine  
       2019-08-11 10:19:21 +08:00 via Android
    夸夸你,虽然标题和描述我都没看懂。_(:з」∠)_
    Miller5991
        2
    Miller5991  
    OP
       2019-08-11 11:21:05 +08:00
    好尴尬。。其实就是定时任务如果任务执行时间超过设置的间隔时间的话,就会都两个协程同时做一件事情。我加了一个 feature 来避免这个情况。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1522 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 17:03 · PVG 01:03 · LAX 09:03 · JFK 12:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.