【发布时间】:2014-06-02 13:34:40
【问题描述】:
我发送包含 cron 作业和任务队列使用情况的电子邮件。该作业每 15 分钟执行一次,使用的队列具有以下设置:
- name: send-emails
rate: 1/m
max_concurrent_requests: 1
retry_parameters:
task_retry_limit: 0
但apiproxy_errors.OverQuotaError 异常经常发生。我正在检查配额详细信息,发现我仍在每日配额范围内(通过电子邮件发送的收件人、发送的附件数据等),并且我相信我不能超过 maximum per minute limit,因为我使用的速率仅为每个任务 1 个分钟(即每分钟发送不超过 1 封邮件)。
我哪里错了,我应该检查什么?
【问题讨论】:
-
队列最多可以包含 100 条消息。但一项任务仅用于发送 1 封电子邮件。但是,在检查日志时,我看到
2014-06-02 18:43:46.514、2014-06-02 18:44:14.952、014-06-02 18:44:16.858,这更常见,然后是每分钟 1 个任务(我对rate: 1/m的预期)。 -
@GAEfan,看起来我应该将
bucket_size定义为等于1以便正确使用rate,对吧? -
你为什么设置这么低的速率和桶大小?您是否每 15 分钟只发送一封电子邮件?另外,您是否使用
.add(queue_name="send-emails")设置了任务队列名称 -
当队列中有很多任务并且速率很高时,桶大小限制了队列的处理速度。这使您可以拥有高速率,因此在任务入队后不久就开始处理,但在短时间内将许多任务入队时仍会限制资源使用。如果队列没有指定
,则默认值为 5。 -
是的,如果您只想每分钟发送一封电子邮件,则需要更改存储桶大小。
rate不是发送电子邮件的速率;它是桶被补充的速率。因此,按照您的方式,您每 1 分钟发送一桶 5 封(默认为bucket-size)电子邮件
标签: google-app-engine email cron task-queue