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

Go gin 框架如何开启和停止任务

  •  
  •   Hanggi · Aug 7, 2019 · 6577 views
    This topic created in 2652 days ago, the information mentioned may be changed or developed.

    有两个 API 接口,/v1/run 和 /v1/stop。

    任务是多个的,根据 id 区分。

    调用 /v1/run?id=1 任务 1 就会开始运行并处于运行状态。

    因为任务是定期持续运行的类型,所以任务可能要用类似 gocron 之类的库,或者有个好的选择。

    再调用 /v1/stop?id=1 就会停止。

    还有就是 /v1/status?id=1 就能查看运行状态。

    要如何实现呢?

    Supplement 1  ·  Aug 7, 2019
    不是说跟 gin 有什么关系,而是要在 gin 实现它。
    目前有一种实现方案,但是感觉并不是特别优雅,想寻求一种优雅的实现方法。

    简单说就是多任务并发队列,每个任务都有不同的循环周期。
    需要添加新任务,查询所有任务,停止并删除指定任务。

    求优雅的实现方法。
    16 replies  •  2019-08-08 02:30:34 +08:00
    liangjx
    liangjx
    Aug 7, 2019
    1
    设置一个信号量,stop 修改信号量
    ManjusakaL
    ManjusakaL
    Aug 7, 2019
    2
    最好依靠专门的队列来做吧。。
    thet
    thet
    Aug 7, 2019 via Android
    3
    跟 gin 无关,要看接口里面的 handler 怎么实现,任务跑在哪的
    labulaka521
    labulaka521
    Aug 7, 2019 via Android
    4
    暂停任务可以使用 context
    karllynn
    karllynn
    Aug 7, 2019
    5
    这跟 gin 有啥关系…
    Hanggi
    Hanggi
    OP
    Aug 7, 2019
    6
    @karllynn Api 框架啊
    reus
    reus
    Aug 7, 2019❤️2
    7
    这和 gin 没有关系,你不用 gin 不会实现的话,用 gin 你也一样不会实现
    yiyi11
    yiyi11
    Aug 7, 2019 via Android
    8
    你需要一个监听器。
    Hanggi
    Hanggi
    OP
    Aug 7, 2019
    9
    @reus 嗯,不用 gin 知道怎么做,但是得加到 gin 上去,会吗?
    a7a2a7a2
    a7a2a7a2
    Aug 7, 2019
    10
    4 楼说对了,早两年就有出了外部控制协程的官方库了,context
    Hanggi
    Hanggi
    OP
    Aug 7, 2019
    11
    @labulaka521
    @a7a2a7a2 谢谢,研究下。
    labulaka521
    labulaka521
    Aug 7, 2019
    12
    @Hanggi 可以这样做 任务运行的时候穿进去 ctx 然后保存这个 ctx 对应的 cancelFunc 和任务名称保存在一个 map 中 map 是全局变量,然后停止的时候从 map 中取出任务对应的 cancelFunc 执行就可以了
    Hanggi
    Hanggi
    OP
    Aug 7, 2019
    13
    @labulaka521 谢谢,要的就是这个。
    clearT
    clearT
    Aug 7, 2019 via iPhone
    14
    https://github.com/robfig/cron
    github.com/jakecoffman/cron
    看看这两个能满足吗,后者再前者上封装了删除任务的方法
    Mark3K
    Mark3K
    Aug 8, 2019
    15
    这 API 设计的很有趣,跟函数名有异曲同工之妙
    Mitt
    Mitt
    Aug 8, 2019 via iPhone
    16
    这确实跟 gin 没关系,你的问题其实应该是如何持久化存储状态
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1554 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 47ms · UTC 16:31 · PVG 00:31 · LAX 08:31 · JFK 11:31
    ♥ Do have faith in what you're doing.