许多流行的任务队列(例如Google GAE TaskQueue,Celery)都具有ETA /倒计时功能,允许在xxx秒后将任务放入队列。
我正在开发一个需要具有ETA功能的任务队列的项目。但是,我必须使用Google Pubsub邮件系统。 Pubsub没有ETA功能。我想知道如何为任务队列实现可靠和可扩展的ETA机制。欢迎使用一般架构思想和实际代码示例。
我们的系统每秒排队600-2000个任务,其中约10%需要ETA。它是一个分布式系统,对性能至关重要。
我试图追踪芹菜的来源code,但找不到处理ETA的实际逻辑。如果有人能指出我处理ETA的Celery文件/代码也会很好。
答案 0 :(得分:0)
我想我可能已经找到了Celery是如何做到的。在eventlet.py中,它使用eventlet的spawn_after功能来延迟工作人员创建" ETA"秒。
secs = max(eta - monotonic(), 0)
g = self._spawn_after(secs, entry)