【发布时间】:2016-11-10 22:19:40
【问题描述】:
在我的应用程序中,我需要在事件发生时向大量用户发送电子邮件。我想逐步发送这些电子邮件,而不是一次全部发送。为了解释清楚,假设我需要向 10,000 个用户发送电子邮件。
我目前使用最大速率为 1 个任务/秒的任务队列来执行此操作。我将 10,000 个任务分批入队,电子邮件以 1/秒的速度发送出去。
我想将此更改为对任务使用 ETA,而不是将任务队列限制为最大速率。从概念上讲,它是这样的(除了任务提交将被批处理):
now = datetime.utcnow()
for i, email in enumerate(email_list):
eta = now + datetime.timedelta(seconds=i)
deferred.defer(send_email, email, _eta=eta)
在实施这样的更改之前,我希望 GAE 可以有效地做到这一点。
如果我在一个任务队列中有 10,000 个任务,每个任务都有不同的 ETA,GAE 任务队列是否能够有效地监控所有任务并在大约(精确的 ETA 并不重要)适当的时间启动它们?我不知道谷歌为此使用了什么算法。
编辑:
想象一下,如果您在一天内插入了十亿个任务,每个任务都有一个 ETA。 GAE 将如何监控这些任务以确保它们在正确的时间被解雇?在某个时间间隔(例如,每分钟)轮询所有任务将是一个糟糕的解决方案。也许 GAE 使用某种优先级队列。如果 GAE 已经实现了一种算法,可以通过 ETA 扩展许多任务,那就太好了。
【问题讨论】:
标签: google-app-engine task-queue