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

2019-08-07 16:37:36 +08:00
 Hanggi

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

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

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

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

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

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

要如何实现呢?

5423 次点击
所在节点    Go 编程语言
16 条回复
liangjx
2019-08-07 16:42:31 +08:00
设置一个信号量,stop 修改信号量
ManjusakaL
2019-08-07 17:41:21 +08:00
最好依靠专门的队列来做吧。。
thet
2019-08-07 17:49:14 +08:00
跟 gin 无关,要看接口里面的 handler 怎么实现,任务跑在哪的
labulaka521
2019-08-07 18:16:10 +08:00
暂停任务可以使用 context
karllynn
2019-08-07 19:58:42 +08:00
这跟 gin 有啥关系…
Hanggi
2019-08-07 20:00:24 +08:00
@karllynn Api 框架啊
reus
2019-08-07 20:08:47 +08:00
这和 gin 没有关系,你不用 gin 不会实现的话,用 gin 你也一样不会实现
yiyi11
2019-08-07 20:32:06 +08:00
你需要一个监听器。
Hanggi
2019-08-07 21:12:30 +08:00
@reus 嗯,不用 gin 知道怎么做,但是得加到 gin 上去,会吗?
a7a2a7a2
2019-08-07 21:27:59 +08:00
4 楼说对了,早两年就有出了外部控制协程的官方库了,context
Hanggi
2019-08-07 21:41:28 +08:00
@labulaka521
@a7a2a7a2 谢谢,研究下。
labulaka521
2019-08-07 22:23:11 +08:00
@Hanggi 可以这样做 任务运行的时候穿进去 ctx 然后保存这个 ctx 对应的 cancelFunc 和任务名称保存在一个 map 中 map 是全局变量,然后停止的时候从 map 中取出任务对应的 cancelFunc 执行就可以了
Hanggi
2019-08-07 22:48:38 +08:00
@labulaka521 谢谢,要的就是这个。
clearT
2019-08-07 23:22:34 +08:00
https://github.com/robfig/cron
github.com/jakecoffman/cron
看看这两个能满足吗,后者再前者上封装了删除任务的方法
Mark3K
2019-08-08 00:39:38 +08:00
这 API 设计的很有趣,跟函数名有异曲同工之妙
Mitt
2019-08-08 02:30:34 +08:00
这确实跟 gin 没关系,你的问题其实应该是如何持久化存储状态

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/589870

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX