使用ETA / Countdown实现TaskQueue(如Celery)

时间:2016-10-02 04:31:41

标签: celery message-queue messaging task-queue google-cloud-pubsub

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

我正在开发一个需要具有ETA功能的任务队列的项目。但是,我必须使用Google Pubsub邮件系统。 Pubsub没有ETA功能。我想知道如何为任务队列实现可靠和可扩展的ETA机制。欢迎使用一般架构思想和实际代码示例。

我们的系统每秒排队600-2000个任务,其中约10%需要ETA。它是一个分布式系统,对性能至关重要。

我试图追踪芹菜的来源code,但找不到处理ETA的实际逻辑。如果有人能指出我处理ETA的Celery文件/代码也会很好。

1 个答案:

答案 0 :(得分:0)

我想我可能已经找到了Celery是如何做到的。在eventlet.py中,它使用eventlet的spawn_after功能来延迟工作人员创建" ETA"秒。

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