大量定时任务如何快速可靠的实现?

2014-05-20 14:37:31 +08:00
 yueyoum
场景类似于 EVE中的技能训练,
玩家将要训练的技能放入 训练队列中,

每个任务训练玩后,都会主动通知玩家,自动开始下个技能

现在我的系统中也有类似的东西。

玩家会开启的一个带总时间限制的功能,开启后可以随意停止。或者下线,直到达到时间限制,自动停止。

我想的就是 每个玩家的这个操作都是一个定时任务,这个任务执行时间就是 到达时间限制的时候,功能就是停止这个玩家的这项功能。

考察了 celery (borker用的 redis),
但经过我的测试 它的 task.apply_async(... countdown=xxx)
在丝毫无负责的情况下,并不精确。
并且文档也说明了,只是保证在 countdown 之后执行, 负载 网络 等原因会导致其不保证一定准时执行。


其实 celery 也是可用的,只是精度差了点。

有没有高精度的实现?
7876 次点击
所在节点    程序员
22 条回复
mx1700
2014-05-21 23:37:30 +08:00
@yueyoum 不用不停的loop,获取最近的一条任务,计算距离当前的时间差,启动一个计时器到时间再触发任务执行,然后再启动计时器。
如果有新任务插入,就取消当前计时器,重新计时。
yueyoum
2014-05-22 12:01:53 +08:00
@mx1700 是的 我的思路也是这样, 并且用celery实现了

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

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

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

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

© 2021 V2EX