谷歌应用程序引擎锁定



只是想知道你们中是否有人遇到过这种情况。我在谷歌应用引擎上玩Python邮件API,我创建了一个应用程序,通过POST接受消息主体和地址,在数据存储中创建一个实体,然后每分钟运行一个cron作业,抓取200个实体并发送电子邮件,然后删除实体。

我用1500封电子邮件进行了一个实验,在数据存储中创建了1500个实体,并发送了1500封电子邮件。然后我查看了我的统计数据,发现配额中使用了大约45000名接受者,这怎么可能呢?

所以我的问题是,"通过电子邮件发送的收件人"配额在哪一点才算真正的数量?在我创建邮件对象的时候,或者当我实际send()它的时候?我本来希望第二个,但配额似乎显示出了不同的东西。我确实在cron和任务等之间传递邮件对象。有人知道这方面的信息吗?

谢谢。

更新:原来我实际上发送了45k封电子邮件,队列只有1500封。似乎一个cron作业一直运行到上一个作业完成,并使用相同的实体进行工作。因此,问题变为"我如何锁定实体,并确保在发送电子邮件之前没有人选择它们"?

再次感谢!

使用任务发送电子邮件。

创建一个以键为参数的任务,检索该键的存储实体,然后发送电子邮件。

当您的处理程序收到正文和地址时,像现在这样存储它,但随后将任务排队进行发送,并将数据存储对象的密钥传递给该任务,这样它就知道要为哪个对象发送电子邮件。

您可能会发现正文和地址足够小,您可以简单地将它们作为参数传递给任务,并让任务发送电子邮件,而无需直接在数据存储中存储任何内容。

这还有一个优点,如果你想限制在给定的时间(配额)内发送的电子邮件数量,你可以设置一个具有该速率的任务队列。

实例化电子邮件对象当然不计入您的"收件人电子邮件"配额。与其他应用程序引擎服务一样,您在触发RPC时消耗配额,即调用send()

如果你打算给1500个收件人发电子邮件,而应用程序引擎说你给45000个收件人发了电子邮件,那么你的代码就有漏洞了。

最新更新