谷歌应用引擎锁定

用户

只是想知道你们有没有人碰到过这个。我在googleappengine上玩Python邮件API,我创建了一个应用程序,它通过POST接受消息体和地址,在数据存储中创建一个实体,然后每分钟运行一个cron作业,获取200个实体并发送电子邮件,然后删除这些实体。在

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

所以我的问题是,“收件人通过电子邮件发送”的配额在哪一点上实际起作用?在我创建邮件对象的时候,还是在我实际send()它的时候?我本来希望有第二个,但配额似乎显示了一些不同的东西。我确实在cron和tasks之间传递邮件对象,有人知道这方面的信息吗?在

谢谢。在

更新:事实上,我发送的邮件实际上是4.5万封,队列只有1500封。看起来,一个cron作业会一直运行到上一个作业完成并使用相同的实体运行。所以问题就变成了“如何锁定实体,确保没有人在发送电子邮件之前选择它们”?在

再次感谢!在


已被浏览了888次
更新日期: 2020-10-28 19:42:42
2 个回答
fefe Tyson

实例化一个email对象当然不计入“通过电子邮件发送的收件人”配额。与其他appengine服务一样,当您触发RPC时,您使用配额,即调用send()。在

如果你打算给1500个收件人发邮件,而App Engine说你发了45000封邮件,那么你的代码有一个错误。在

评论 - 2020年9月11日 20:57
fefe Tyson

使用任务发送电子邮件。在

创建一个任务,该任务将密钥作为参数,检索该密钥的存储实体,然后发送电子邮件。在

当处理程序接收到正文和地址时,按现在的方式存储,然后将任务排队以执行发送,并将数据存储对象的密钥传递给该任务,以便它知道要为哪个对象发送电子邮件。在

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

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

评论 - 2020年9月11日 20:57

最新Python问答

推荐Python问答