GAE数据存储区/任务队列 - 每次只保存一个项目

时间:2015-01-18 11:02:24

标签: google-app-engine google-cloud-datastore task-queue

我开发了一个python应用程序,用于记录来自传入电子邮件的信息,并将此信息保存到GAE数据存储区。注册电子邮件就可以了。作为注册的一部分,具有相同主题和收件人的电子邮件会获得会话ID。但是,有时电子邮件会相互快速地进入系统,来自同一对话的电子邮件不会获得相同的ID。发生这种情况是因为同一个对话中的两封电子邮件正在同时处理,而GAE在运行此对话的查询时仍未看到其他条目。

我一直在考虑一种防止这种情况的方法,并认为如果系统一次只处理每个用户一封电子邮件(每个发件人都有自己的帐户),那将是最好的。这可以通过使用推送任务队列来完成,该推送任务队列首先检查当前是否正在为该用户处理电子邮件,如果是,则将新任务放入拉取队列中,一旦上一个任务具有该任务,就可以从该队列中检索该任务。已经完成了。

这个的最大缺点是(我认为)我无法运行推送队列异步,这显然是一个很大的性能劣势。关于什么是更好的方法来设置这样一个过程的任何想法?

1 个答案:

答案 0 :(得分:1)

显然这是典型的竞赛条件。我已经使用了Transactions功能来防止多个进程同时写入。可以在此处找到文档:https://cloud.google.com/appengine/docs/python/datastore/transactions