The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
Miller5991

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

  •  
  •   Miller5991 · Aug 10, 2019 · 2951 views
    This topic created in 2508 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

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

    2 replies    2019-08-11 11:21:05 +08:00
    Takamine
        1
    Takamine  
       Aug 11, 2019 via Android
    夸夸你,虽然标题和描述我都没看懂。_(:з」∠)_
    Miller5991
        2
    Miller5991  
    OP
       Aug 11, 2019
    好尴尬。。其实就是定时任务如果任务执行时间超过设置的间隔时间的话,就会都两个协程同时做一件事情。我加了一个 feature 来避免这个情况。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1174 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 23:37 · PVG 07:37 · LAX 16:37 · JFK 19:37
    ♥ Do have faith in what you're doing.