1

许多流行的任务队列(例如Google GAE TaskQueue,Celery)都具有ETA /倒计时功能,允许任务在xxx秒后进入队列。使用ETA/Countdown实现TaskQueue(如Celery)

我正在研究需要带ETA功能的任务队列的项目。但是,我必须使用Google Pubsub消息传递系统才有一些限制。 Pubsub没有ETA功能。我想知道如何为任务队列实现可靠和可扩展的ETA机制。欢迎使用一般体系结构思想和实际代码示例。

我们的系统每秒排列600-2000个任务,其中约10%需要拥有ETA。这是一个分布式系统和性能关键。

我试图跟踪芹菜的来源code,但找不到处理ETA的实际逻辑。如果有人能指向处理ETA的Celery的文件/代码,那也是一件好事。

回答

0

我想我可能已经发现芹菜是如何做到的。在eventlet.py中,它使用eventlet的spawn_after功能来延迟工作人员创建“ETA”秒。

secs = max(eta - monotonic(), 0) g = self._spawn_after(secs, entry)